开发者

python: read json and loop dictionary

I'm learni开发者_运维百科ng python and i loop like this the json converted to dictionary: it works but is this the correct method? Thank you :)

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

here the JSON:

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

here output:

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


That seems generally fine.

There's no need to first read the file, then use loads. You can just use load directly.

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

Using i and k isn't correct for this. They should generally be used only for an integer loop counter. In this case they're keys, so something more appropriate would be better. Perhaps rename i as container and k as stream? Something that communicate more information will be easier to read and maintain.

You can use output_json.iteritems() to iterate over both the key and the value at the same time.

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

Note that, when using Python 3, you will need to use items() instead of iteritems(), as it has been renamed.


json_data = json.loads(url)

If list is there, then iterate:

 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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜