2011-02-28 79 views
11

我正在學習Python和我循環這樣的JSON轉換爲字典:它的作品,但這是正確的方法嗎?謝謝:)python:閱讀json和循環字典

import json 

output_file = open('output.json').read() 
output_json = json.loads(output_file) 

for i in output_json: 
     print i 
     for k in output_json[i]: 
       print k, output_json[i][k] 

print output_json['webm']['audio'] 
print output_json['h264']['video'] 
print output_json['ogg'] 

這裏的JSON:

{ 
"webm":{ 
    "video": "libvp8", 
    "audio": "libvorbis" 
}, 
    "h264": { 
    "video": "libx264", 
    "audio": "libfaac" 
}, 
    "ogg": { 
    "video": "libtheora", 
    "audio": "libvorbis" 
} 
} 

這裏輸出:

> h264 
audio libfaac video libx264 
ogg 
> audio libvorbis video libtheora webm 
> audio libvorbis video libvp8 libvorbis 
> libx264 {u'audio': u'libvorbis', 
> u'video': u'libtheora'} 

回答

25

這似乎大致天晴。

有沒有必要先讀取文件,然後使用負載。您可以直接使用加載。

output_json = json.load(open('/tmp/output.json')) 

使用i和k對此不正確。它們通常只能用於整數循環計數器。在這種情況下,它們是鑰匙,所以更適合的東西會更好。也許重命名爲icontainerkstream?傳達更多信息的東西將更易於閱讀和維護。您可以使用output_json.iteritems()同時迭代鍵和值。

for majorkey, subdict in output_json.iteritems(): 
    print majorkey 
    for subkey, value in subdict.iteritems(): 
      print subkey, value 
+0

謝謝你這麼多 – ZiTAL 2011-02-28 21:05:27

+0

我得到''''AttributeError的:「名單'object has no attribute'iteritems''''' – 2013-05-07 12:50:12

+0

這表明你的JSON文件不包含字典,而是一個列表。也許這是一本1字典的清單?嘗試打印出來,看看它包含的內容。 – chmullig 2013-05-07 16:45:08

1

json_data = json.loads(URL)

如果名單是存在的,那麼迭代:

for majorkey, subdict in json_data.iteritems(): 
    for one_majorkey in subdict: 
    for subkey, value in one_majorkey.iteritems(): 
     for each_subkey, valu_U in value.iteritems(): 
      for each_sub_subkey, value_Q in valu_U.iteritems(): 
       for each_sub_sub_subkey, value_num in value_Q.iteritems(): 
        print each_sub_sub_subkey, value_num