2011-02-28 80 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