2017-08-08 61 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

所以我想通了,我得到的迴應已經解碼!我遇到的問題是解碼的響應是一個字典中的字典列表。