2013-10-01 11 views
6

Mam ciąg danych, który ma w zasadzie z obiektów w obiektach ..Przekształcanie obiektów w JSON do słownika w 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. 

Nie mój warunek jest przekształcenie tego do obiektów JSON jako słownika. Próbowałem poniżej sposób

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

ale the_dict daje tylko lewe wartości ubocznych, bez prawa wartości ...

W ten sam sposób, jeśli ciąg ma format ..

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

i po ten sam kod.

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

the_dict = json.loads(JSON_DataList) 

daje słownika długości 2, i to, co spodziewać ...

Czy każdy proszę mi pomóc w pierwszym przypadku, jak mogę dostać słownika ...

+1

Twój JSON jest nieprawidłowy. 'grupa' musi być cytowana. –

+2

protip: Jeśli chcesz mieć poprawny JSON, zrób coś takiego: 'import json; json.dumps ({'key': 'val', 'other_key': {'something': [1, 2, 3]}}) '- niech biblioteka' json' zrobi to za Ciebie. –

Odpowiedz

5

Znalazłem dwa błędy w twoim pierwszym przykładzie:

  1. Masz group w swojej ufiksowanej (Json) wersji swojego dict. Powinno to być "group" (z cytatami).
  2. Błędnie wpisałeś zmienną; JSON_DatalistJSON_DataList (mała litera vs. litera L).

Po zamocowaniu obu, nie miałem żadnych problemów już:

>>> 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

Dzięki Alfe, Teraz chcę uzyskać wartość "id": "XXXX", który jest obecny w użytkowniku: grupa jak to uzyskać ?, W Pythonie możemy uzyskać wartość taką jak this the_dict ['user'] ['group' ] ['id'], to wydrukuje wartość ID. Jak to zrobić w programie –

+0

Co masz na myśli mówiąc o różnicy między "w Pythonie" i "w programie"? Po prostu użyj 'the_dict ['user'] ['group'] ['id']', tak jak proponowałeś. Jaki jest problem z korzystaniem z tego? – Alfe

+0

Dzięki .. Wiem, że the_dict ['user'] ['group'] ['id'] poda wartość, ale jest to polecenie statycznego tłumacza. W czasie wykonywania nie znam dokładnego polecenia (która wartość klucza). EX: może to być dict ['user'] lub dict ['user'] ['group'] lub dict ['user'] ['group'] ['id'] ['etc ..'] ['etc .. "]. Czy możesz sugerować mi w tej sprawie, w jaki sposób mogę wykonać to polecenie tłumacza w czasie wykonywania. –

0

I zorientowali się, jak generować the_dict['user']['group']['id'] dynamicznie przez eval wyrażenia Pythona.

Klucze to dane wejściowe od użytkownika, oddzielone numerem :. Przykład: user:group:id.

KOD:

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

po rozwiązać problem powinien być grupa "grupa", poniżej kod może spełnić swoje wymagania

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'}}} 
Powiązane problemy