2013-10-01 115 views
6

我有數據串基本上具有物體與物體..轉換JSON對象在Python

{"id":"XXXX", "name": "xyz", "user" : { "id": "XXXX", "username":"XYZ", group:{"id": "XXXX"}}}. You can check this format using "http://chris.photobooks.com/json/default.html" site. 

沒有我的要求是將其轉換爲JSON對象作爲字典。我曾嘗試以下方式

import json 
JSON_Datalist = '{"id":"XXXX", "name": "xyz", "user" : { "id": "XXXX", "username":"XYZ", group:{"id": "XXXX"}}}' 
the_dict = json.loads(JSON_DataList) 

但the_dict只給出左側值,沒有正確的價值觀......

在字符串是否具有格式相同的方式..

"[{"sample": false, "radop": null, "view": true, "Example1": null}, {"noMarket": false, "Example2": null}]" 

及以下相同的代碼。

JSON_Datalist = '[{"sample": false, "radop": null, "view": true, "Example1": null}, {"noMarket": false, "Example2": null}]' 

the_dict = json.loads(JSON_DataList) 

它給人的2長的字典,這是我們所期望的......

可以在任何請幫我在第一種情況下我怎麼能買到字典...

+1

你JSON是無效的。 'group'需要被引用。 –

+2

protip:如果你想要有效的JSON,可以這樣做:'import json; json.dumps({'key':'val','other_key':{'something':[1,2,3]}})' - 讓'json'庫爲你做。 –

回答

5

我在您的第一個示例中發現了兩個錯誤:

  1. 您的字典化(Json)版本的字典中有一個group。這應該是"group"(帶引號)。
  2. 拼寫錯誤; JSON_DatalistJSON_DataList(小寫字母與大寫字母L)。

兩個固定後,我沒有問題了:

>>> JSON_Datalist = '{"id":"XXXX", "name": "xyz", "user" : { "id": "XXXX", "username":"XYZ", "group":{"id": "XXXX"}}}' 
>>> the_dict = json.loads(JSON_Datalist) 
>>> the_dict 
{u'user': {u'username': u'XYZ', u'group': {u'id': u'XXXX'}, u'id': u'XXXX'}, u'id': u'XXXX', u'name': u'xyz'} 
+0

感謝Alfe,現在我想得到「id」的值:「XXXX」,它出現在user:group中如何得到它?,在Python中我們可以得到像這樣的值the_dict ['user'] ['group' ] ['id'],這將打印ID值。如何在程序中執行此操作 –

+0

當您提到「在Python中」和「在程序中」之間的區別時,您是什麼意思?按照你的建議,使用'the_dict ['user'] ['group'] ['id']'。使用這個問題有什麼問題? – Alfe

+0

謝謝......我知道the_dict ['user'] ['group'] ['id']會給出值,但它是靜態解釋器命令。在運行時我不知道確切的命令(哪個鍵值)。 EX:它可能是dict ['user']或dict ['user'] ['group']或dict ['user'] ['group'] ['id'] ['etc ..'] ['etc ..'。所以你可以在這種情況下給我建議我怎樣才能在運行時做出這個解釋器命令。 –

0

我想通了如何通過Python的eval表達動態生成the_dict['user']['group']['id']

是來自用戶的輸入,由:分開。例如:user:group:id

CODE:

RefCount = 0 
RespDict = json.loads(JSON_Datalist.content) #convert strings to Java object using JSON 
SplitKeys = Keys.split(":") 
KeyCount = len(SplitKeys) 
CommandText = "RespDict" #To setup command line based on keys information 
while (RefCount <KeyCount): 
    CommandText = CommandText+"['"+SplitKeys[RefCount]+"']" 
    RefCount = RefCount + 1 
    print CommandText   
print eval(CommandText) #Final key value 
1

後解決問題組應該是 「組」,下面的代碼能滿足您的要求

json_data={"id":"XXXX", "name": "xyz", "user" : { "id": "XXXX", "username":"XYZ", "group":{"id": "XXXX"}}} 
data = json.dumps(json_data) 
json_to_python = json.loads(data) 
print (json_to_python) 


{'id': 'XXXX', 'name': 'xyz', 'user': {'id': 'XXXX', 'username': 'XYZ', 'group': {'id': 'XXXX'}}}