python: lee json y el diccionario de bucles

Estoy aprendiendo python y hago un bucle como este el json convertido al diccionario: funciona, pero ¿es este el método correcto? Gracias 🙂

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

aquí el JSON:

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

aquí salida:

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

Eso parece generalmente bien.

No hay necesidad de leer primero el archivo, luego usar cargas. Solo puedes usar load directamente.

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

Usar i y k no es correcto para esto. Por lo general, solo se deben utilizar para un contador de bucle entero. En este caso son claves, así que algo más apropiado sería mejor. ¿Quizás renombrar i como container k como stream ? Algo que comunique más información será más fácil de leer y mantener.

Puede usar output_json.iteritems() para iterar sobre la clave y el valor al mismo tiempo.

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

Tenga en cuenta que, cuando use Python 3, necesitará usar items () en lugar de iteritems (), ya que ha sido renombrado.

json_data = json.loads (url)

Si la lista está ahí, entonces itera:

  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