2017-08-08 68 views
0

所以我运行一个GET到系统中,并得到此输出:修改注册表项,以匹配后

'{ 
    "comment": "A good object", 
    "number": "1.1", 
    "extra_stuff": { 
     "extra_id": {"value": 100}, 
     "extra_name": {"value": "Test"}, 
     } 
}' 

之前将帖子发到系统B,我需要翻译(和忽略)某些键(但保持价值)。我想从这个GET和翻译只是嵌套的字典键(extra_stuff中的键),只有他们中的一个。

翻译:

mapping_dict = { 'extra_id': 'id' } 
dict_to_post = { '#KEY extra_ID': #VALUE FROM extra_ID# :, 'name' : Test, 'other' : True } 

我有一个功能转换从另一个问题在这里把字典键:

def update_dict_keys(obj, mapping_dict): 
    if isinstance(obj, dict): 
     return {mapping_dict[k]: update_dict_keys(v, mapping_dict) for k, v in obj.iteritems()} 
    else: 

     return obj 

但我不确定如何只发送嵌套字典进入该功能,我似乎只是把“主”字典放在那里。不知道最好的方法是什么。我还需要处理来自“主”字典以及另一篇文章的信息。

回答

0

你确定,有一个,落后于{"value": "Test"}因为这是无效的json和你的得到的回应看起来像json

如果这是只有在这里你的文章有误,您可以使用 json.loads()得到一本字典,从你的回应字符串:

import json 

res = '{ 
    "comment": "A good object", 
    "number": "1.1", 
    "extra_stuff": { 
      "extra_id": {"value": 100}, 
      "extra_name": {"value": "Test"} 
    } 
}' 

# convert to dict 
res_dict = json.loads(res) 

# do your mapping 
dict_to_post = { 'extra_id': res_dict['extra_stuff']['extra_id']['value']} 

# dict_to_post is {'extra_id': 100} now 

而且我不明白你所需要的mapping_dict的。你想有{'id':100}作为结果吗?

+0

对不起,错字!正在清理代码以使示例更简单。该映射用于更改GET字典的密钥名称(带有“extra_id”键的嵌套字典),以便稍后可以匹配POST所需的密钥名称。 – Kirke

+0

当我尝试转换它时,出现一些错误: res_dict = json.loads(res) 文件“/usr/lib64/python2.7/json/__init__.py”,第338行,载入中 return _default_decoder.decode (s) 解码的文件“/usr/lib64/python2.7/json/decoder.py”,第366行 obj,end = self.raw_decode(s,idx = _w(s,0).end() ) – Kirke

+0

如果这只是你在问题中提到的一个关键字,那就足够做'dict_to_post = {'id':res_dict ['extra_stuff'] ['extra_id'] ['value']}'你不需要那么你的匹配字典。如果你想匹配更多的键,告诉我,我会更新我的答案。对于你的堆栈跟踪:它不会告诉我你是个例外。 – Igle

0

所以我想通了,我得到的回应已经解码!我遇到的问题是解码的响应是一个字典中的字典列表。