¿Cómo imprimir un archivo JSON?
¿Cómo imprimo un archivo JSON en Python?
Utilice el indent=
parámetro de json.dump()
o json.dumps()
para especificar cuántos espacios sangrar:
>>> import json
>>> your_json = '["foo", {"bar": ["baz", null, 1.0, 2]}]'
>>> parsed = json.loads(your_json)
>>> print(json.dumps(parsed, indent=4))
[
"foo",
{
"bar": [
"baz",
null,
1.0,
2
]
}
]
Para analizar un archivo, use json.load()
:
with open('filename.txt', 'r') as handle:
parsed = json.load(handle)
Puedes hacer esto en la línea de comando:
python3 -m json.tool some.json
(como ya se mencionó en los comentarios a la pregunta, gracias a @Kai Petzke por la sugerencia de python3).
En realidad, Python no es mi herramienta favorita en lo que respecta al procesamiento json en la línea de comando. Para una impresión sencilla y bonita está bien, pero si desea manipular el json, puede volverse demasiado complicado. Pronto necesitarás escribir un archivo de script separado, podrías terminar con mapas cuyas claves sean "alguna clave" (python Unicode), lo que dificulta la selección de campos y realmente no va en la dirección de ser bonito. -impresión.
También puedes usar jq :
jq . some.json
y obtienes colores como beneficio adicional (y una extensibilidad mucho más fácil).
Anexo: Hay cierta confusión en los comentarios acerca del uso de jq para procesar archivos JSON grandes, por un lado, y de tener un programa jq muy grande, por el otro. Para imprimir un archivo que consta de una única entidad JSON grande, la limitación práctica es la RAM. Para imprimir un archivo de 2 GB que consta de una única matriz de datos del mundo real, el "tamaño máximo del conjunto residente" requerido para la impresión bonita era de 5 GB (ya sea usando jq 1.5 o 1.6). Tenga en cuenta también que jq se puede utilizar desde Python después de pip install jq
.
Después de leer los datos con el json
módulo de biblioteca estándar, utilice el módulo de biblioteca estándar pprint para mostrar los datos analizados. Ejemplo:
import json
import pprint
json_data = None
with open('file_name.txt', 'r') as f:
data = f.read()
json_data = json.loads(data)
# print json to screen with human-friendly formatting
pprint.pprint(json_data, compact=True)
# write json to file with human-friendly formatting
pretty_json_str = pprint.pformat(json_data, compact=True).replace("'",'"')
with open('file_name.json', 'w') as f:
f.write(pretty_json_str)
El valor predeterminado indent
es 1, por lo que es posible que desees especificar el tuyo propio.
De forma predeterminada, pprint generará listas como esta:
'not compact': ['pprint',
'will',
'output',
'lists',
'like',
'this'],
Y eso no es mejor que json.dump()
o json.dumps()
con un indent
especificado.
Con compact=True
, pprint generará listas similares a esta:
'compact': ['pprint', 'with compact=True', 'will', 'output',
'lists', 'like', 'this'],
Tenga en cuenta que puede especificar dónde se ajustará con el width
argumento.
Es necesario reemplazar 'comillas simples' con 'comillas dobles' en la cadena devuelta por pprint.pformat(), porque las comillas simples no son json válidos. Cuando mira el archivo en su editor de texto, es posible que no pueda resaltar el json correctamente.
En cualquier caso, es posible que quieras guardarlo como json válido, para que puedas, como humano, simplemente leer tus archivos json cómodamente, si no es más importante que estén formateados sin espacios para que puedan ser procesados por computadora con cegamiento. velocidad.
Al final, el resultado se verá así:
{'address': {'city': 'New York',
'postalCode': '10021-3100',
'state': 'NY',
'streetAddress': '21 2nd Street'},
'age': 27,
'children': [],
'firstName': 'John',
'isAlive': True,
'lastName': 'Smith'}