Hubo un duplicado de esta pregunta que tenía una mejor respuesta. Consulte https://stackoverflow.com/a/10382359/1623645, que sugiere ijson.
Actualización:
lo probé, y es ijson a JSON lo SAX es a XML. Por ejemplo, usted puede hacer esto:?
import ijson
for prefix, the_type, value in ijson.parse(open(json_file_name)):
print prefix, the_type, value
donde prefix
es un índice separados por puntos en el árbol de JSON (lo que sucede si los nombres de claves tienen punto en ellos supongo que sería malo para Javascript, también. ..), theType
describe un evento tipo SAX, uno de 'null', 'boolean', 'number', 'string', 'map_key', 'start_map', 'end_map', 'start_array', 'end_array'
, y value
es el valor del objeto o None
si the_type
es un evento como iniciar/finalizar un mapa/matriz.
El proyecto tiene algunas docstrings, pero no suficiente documentación global. Tuve que buscar en ijson/common.py
para encontrar lo que estaba buscando.
El problema que estoy enfrentando es que tengo 195 archivos para procesar y parece que el recolector de basura de Python no está haciendo un buen trabajo. Después del 10mo archivo, me quedo sin memoria. Estoy usando Python 2.6.4 en Windows 7. Tengo memoria RAM de 3GB – duduklein
¿Por qué necesitas cargar todos ellos en la memoria a la vez? Eso parece ineficaz. –
Si tiene problemas para cargar 500mb xml, vtd-xml es una manera de hacerlo, la cuestión es si tiene sentido hacer vtd-json ... –