2016-05-16 11 views
0

私はローカルに保存されたjsonファイルで作業しようとしています。それは以下のようにフォーマットされます:Pythonでjsonの入れ子にされたdictを解析する方法は?

{ 
    "all":{ 
     "variables":{ 
     "items":{ 
      "item1":{ 
       "one":{ 
        "size":"1" 
       }, 
       "two":{ 
        "size":"2" 
       } 
      } 
     } 
     } 
    } 
} 

私は次のコードを使用してサイズキーの値を取得しようとしています。

with open('path/to/file.json','r') as file: 
    data = json.load(file) 
itemParse(data["all"]["variables"]["items"]["item1"]) 

def itemParse(data): 
    for i in data: 
    # also tried for i in data.iterkeys(): 
     # data has type dict while i has type unicode 
     print i.get('size') 
     # also tried print i['size'] 

は何も問題なく動作しているようです。助言がありますか?

も、エラーが文字列を期待するか、あなたが唯一のキーを取得している dataを反復すると

+0

印刷行にdata [i] ['size']を使用してください。 –

答えて

1

バッファしまったjson.loadsを使用してみました。それを解決するには2つの方法があります。

def itemParse(data): 
    for i, j in data.iteritems(): 
     print j.get('size') 

または

def itemParse(data): 
    for i in data: 
     print data[i].get('size') 
+0

ありがとうマウロ!私はi.get( 'size')を印刷すると同じ結果が得られないのはなぜだろうかと思います。 2番目の例のようにデータをもう一度使用しないでください。 – tkyass

+0

私が答えて言ったように、あなたが辞書上で反復するとき、それはキーを検索します。したがって、文字列に 'get'メソッドを使用するようにしています。 –

+0

マウロに感謝しました! – tkyass

0

まず、json.loads()を使用しています。

data = json.loads(open('path/to/file.json','r').read()) 

第二に、あなたのforループがerror expect string or bufferに関しては、この

for k,v in data.iteritems(): 
    print data[k]['size'] 

に変更する必要があり、あなたはJSONファイルを読み取るための権限を持っているのですか?