2016-04-05 4 views
1

ここにpythonの初心者です。私はすべてのJSONの "グループ"オブジェクトを反復しようとしていますが、各自の難しさがあります。これは部分的なリスト(すべてのユーザーがグループを持っているわけではない)なので、try/catchブロックを使用して、グループのリストを持たないユーザーでも早期終了は発生しません。この埋め込みJSONの "リスト"をPythonでどのように反復処理するのですか?

JSONデータは、スニペット:

{ 
"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 
      } ] 
     } 
    } 
] 

} 

これは、これまでの私のコードです:私はfor gkey...val["groups"][0].iteritems()を行うことにより、グループリストに0番目の項目のリストをプリントアウトすることができます

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  

お知らせけど私が本当に望んでいるのは、groupの各personエントリー(2人のグループに属している人もあれば、10人以上の人もいます)のすべてのリストの反復です。固定長はありません。これどうやってするの?

+0

は 'ヴァル[ "グループ"]'に 'for'ループを使用してください。それとも、あなたが望むものではないのですか? – syntonym

+0

try/exceptの代わりに、val.get( "groups"、[])とそれ以上の反復を言うことができます。その人にグループがない場合は、空のリストが返されます。 –

答えて

1

それはあなたが望むものですか? :

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

以上、一般的には:

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

ありがとう! 2番目の例は、私が必要としていたものです。うわー! – Koko

+0

@Koko ..いいえpblm :) –

関連する問題