2011-02-28 8 views
11

나는 파이썬을 배우고 있으며 json이 사전에 변환 된 것처럼 반복합니다. 작동하지만 올바른 방법입니까? 당신이 여기에 JSON을 파이썬 : 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'] 

을 :) 감사합니다

{ 
"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를 사용하는 것이 올바르지 않습니다. 일반적으로 정수 루프 카운터에만 사용해야합니다. 이 경우 키가되므로 더 적절한 것이 더 좋을 것입니다. i의 이름을 container으로, kstream으로 바꾸십시오. 더 많은 정보를 전달하는 것이 읽고 유지하기가 더 쉬울 것입니다.

output_json.iteritems()을 사용하면 키와 값을 동시에 반복 할 수 있습니다.

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

당신에게 너무 감사합니다 나는''''AttributeError납니다 – ZiTAL

+0

: '목록 '객체에는 속성이 없습니다'iteritems''''' –

+0

JSON 파일에 사전이 아니라 목록이 포함되어 있음을 나타냅니다. 아마도 그것은 사전 하나의 목록입니까? 그것을 밖으로 인쇄하고 정확히 무엇을 포함 볼 수보십시오. – chmullig

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