2013-10-01 19 views
6

ho stringa di dati in fondo che ha un oggetto con negli oggetti ..Conversione oggetti JSON in Dizionario di pitone

{"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. 

No mia esigenza è quella di convertire questo a oggetti JSON come un dizionario. Ho cercato di sotto modo

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

ma the_dict dà solo i valori del lato sinistro, non giusti valori ...

Allo stesso modo se la stringa ha un formato ..

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

e seguenti lo stesso codice.

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

the_dict = json.loads(JSON_DataList) 

dà il dizionario della lunghezza di 2, e questo è quello che ci aspettavamo ...

Può qualunque aiutarlo prego fuori nel primo caso come posso ottenere un dizionario ...

+1

tuo JSON non è valido. 'gruppo' deve essere citato. –

+2

protip: Se vuoi un JSON valido, fai qualcosa di simile a questo: 'import json; json.dumps ({'key': 'val', 'other_key': {'something': [1, 2, 3]}}) '- lascia che la libreria' json' lo faccia per te. –

risposta

5

Ho trovato due errori nel tuo primo esempio:

  1. Hai un group nella tua versione (Json) stringificata del tuo dettato. Questo dovrebbe essere un "group" (con virgolette).
  2. Hai sbagliato a digitare la tua variabile; JSON_DatalistJSON_DataList (lettere minuscole e maiuscole L).

Dopo aver fissato entrambi, non ho avuto problemi più:

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

Grazie Alfe, ora voglio ottenere il valore di "id": "XXXX" che è presente nell'utente: raggruppa come ottenere questo ?, In Python possiamo ottenere il valore come questo the_dict ['user'] ['group' ] ['id'], questo stamperà il valore dell'ID. Come fare questo nel programma –

+0

Cosa intendi quando menzioni una differenza tra "in Python" e "in programma"? Usa semplicemente 'the_dict ['user'] ['group'] ['id']' come hai proposto. Qual è il problema con l'utilizzo di questo? – Alfe

+0

Grazie ... Conosco the_dict ['user'] ['group'] ['id'] darà il valore, ma è un comando interprete statico. In fase di esecuzione non conosco il comando esatto (quale valore chiave). EX: può essere dettt ['user'] o dict ['user'] ['group'] o dict ['user'] ['group'] ['id'] ['etc ..'] ['etc .. ']. Quindi mi puoi suggerire su questo caso come posso fare questo comando interprete in fase di esecuzione. –

0

ho capito come generare dinamicamente tramite the_dict['user']['group']['id']eval espressione di Python.

Chiavi è l'input dell'utente, separato da :. Esempio: user:group:id.

CODICE:

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

dopo risolvere il problema dovrebbe essere gruppo "gruppo", sotto il codice in grado di soddisfare le vostre esigenze

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'}}} 
Problemi correlati