2016-04-05 6 views
1

Neu bei Python hier. Ich versuche, über alle JSON- "Gruppen" -Objekte für jede Person zu iterieren, habe aber einige Schwierigkeiten. Dies ist nur eine unvollständige Liste (nicht alle Benutzer haben Gruppen), also muss ich den try/catch-Block verwenden, damit Benutzer ohne eine Liste von Gruppen keine vorzeitige Beendigung verursachen.Wie man über diese eingebettete JSON "Liste" in Python iteriert?

Die JSON-Daten-Snippet:

{ 
"people": [ 
    { 

     "person": { 
     "name": "joe", 
     "email": "[email protected]", 

     "groups": [ 
      { 
       "name": "office", 
       "id": 23 
      }, 

      { 
       "name": "mfg", 
       "id": 93 
      } ] 
     }, 


     "person": { 
     "name": "bill", 
     "email": "[email protected]", 

     "groups": [ 
      { 
       "name": "acctg", 
       "id": 133 
      }, 

      { 
       "name": "mgr", 
       "id": 207 
      } ] 
     } 
    } 
] 

} 

Dies ist mein Code so weit:

jdata = json.loads... 
for person in jdata['people']: 
    for key, val in person.iteritems(): 
     print "key ", key , " is ", val 

     print val["name"] 
     print val["email"] 

     try: 
     for gkey, gval in val["groups"][0].iteritems(): 
      print "gval: " + gval 
     except: 
     foo=1  

Hinweis I in der Gruppenliste eine Liste der 0-ten Artikel ausdrucken können die for gkey...val["groups"][0].iteritems() indem aber Was ich wirklich will, ist über alle group Listen von jedem Eintrag person iterieren (einige Leute gehören zu zwei Gruppen, andere 10 oder mehr), so gibt es keine feste Länge. Wie kann ich das machen?

+0

eine 'for' Schleife Verwenden Sie auf' val [ "Gruppen"] '. Oder ist das nicht was du willst? – syntonym

+0

Anstelle von try/exception kann man val.get ("groups", []) sagen und die iterate darüber. Wenn diese Person keine Gruppen hat, wird eine leere Liste zurückgegeben. –

Antwort

1

Wollen Sie das? :

>>> for group in j['people'][0]['person']['groups']: 
     for k,v in group.items(): 
      print(k,v) 


name acctg 
id 133 
name mgr 
id 207 

Oder allgemeiner:

>>> for person in j['people']: 
     for group in person['person']['groups']: 
      print('Name : {} --- ID: {}'.format(group['name'], group['id'])) 


Name : acctg --- ID: 133 
Name : mgr --- ID: 207 
+0

Danke! Das zweite Beispiel, das Sie zeigen, ist genau das, was ich brauchte. Wütend! – Koko

+0

@Koko .. Nein pblm :) –

Verwandte Themen