Tengo un archivo JSON que es un desastre que quiero imprimir. ¿Cuál es la forma más fácil de hacer esto en Python? Sé que PrettyPrint toma un "objeto", que creo que puede ser un archivo, pero no sé cómo pasar un archivo; solo usar el nombre de archivo no funciona.
python
json
formatting
pretty-print
Muchacha
fuente
fuente
json.loads()
e imprima bonito ese diccionario resultante. O simplemente salte a la sección de Impresión bonita de la documentación dejson
Python .<your_file.js python -mjson.tool
como en el enlace de @ ed?Respuestas:
El
json
módulo ya implementa algunas impresiones bonitas básicas con elindent
parámetro:Para analizar un archivo, use
json.load()
:fuente
print json.dumps(your_json_string, indent=4)
print(json.dumps(json.loads(your_json_string), indent=2))
contrario, solo me mostró una cadena escapadaPuede hacer esto en la línea de comando:
(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 comandos. Por simple impresión bonita está bien, pero si desea manipular el json puede complicarse demasiado. Pronto necesitaría escribir un archivo de script por separado, podría terminar con mapas cuyas claves son u "alguna clave" (python unicode), lo que hace que la selección de campos sea más difícil y realmente no va en la dirección bonita -impresión.
También puedes usar jq :
y obtienes colores como bonificación (y una extensibilidad mucho más fácil).
Anexo: Existe cierta confusión en los comentarios sobre el uso de jq para procesar archivos JSON grandes por un lado, y tener un programa jq muy grande por el otro. Para la impresión bonita de un archivo que consta de una sola entidad JSON grande, la limitación práctica es la RAM. Para la impresión bonita de un archivo de 2 GB que consta de una sola matriz de datos del mundo real, el "tamaño máximo establecido para residentes" 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 usar desde Python después
pip install jq
.fuente
jq '' < some.json
python3 -m json.tool <IN >OUT
, ya que esto mantiene el orden original de los campos en los dictados JSON. La versión 2 del intérprete de Python clasifica los campos en orden alfabético ascendente, que a menudo no es lo que desea.Puede usar el módulo integrado pprint (https://docs.python.org/3.6/library/pprint.html) .
Cómo puede leer el archivo con datos json e imprimirlo.
fuente
Pygmentize + Python json.tool = Impresión bonita con resaltado de sintaxis
Pygmentize es una herramienta asesina. Mira esto.
Combino python json.tool con pygmentize
Consulte el enlace de arriba para obtener instrucciones de instalación de pygmentize.
Una demostración de esto está en la imagen a continuación:
fuente
-g
realidad no funciona;) Dado que la entrada proviene de stdin, pygmentize no puede hacer una buena suposición. Debe especificar lexer explícitamente:echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json
Use esta función y no se preocupe por tener que recordar si su JSON es uno
str
odict
más, solo mire la bonita impresión:fuente
Una vez escribí una
prettyjson()
función para producir una salida bonita. Puede obtener la implementación de este repositorio .La característica principal de esta función es que trata de mantener el dict y enumerar los elementos en una línea hasta que
maxlinelength
se alcanza cierto . Esto produce menos líneas de JSON, la salida se ve más compacta y más fácil de leer.Puede producir este tipo de salida, por ejemplo:
UPD Dic'19: coloqué el código en un repositorio separado , corregí algunos errores e hice algunos otros ajustes.
fuente
Para poder imprimir desde la línea de comandos y poder tener control sobre la sangría, etc., puede configurar un alias similar a este:
Y luego use el alias de una de estas maneras:
fuente
Utilice pprint: https://docs.python.org/3.6/library/pprint.html
print()
comparado conpprint.pprint()
fuente
pprint
no produce un documento JSON válido.Aquí hay un ejemplo simple de impresión bonita de JSON en la consola de una manera agradable en Python, sin requerir que JSON esté en su computadora como un archivo local:
fuente
Funciona para mostrarlo o guardarlo en un archivo.
fuente
Creo que es mejor analizar el json antes, para evitar errores:
fuente
Puedes probar pprintjson .
Instalación
Uso
Imprima JSON desde un archivo usando la CLI de pprintjson.
Imprima JSON desde un stdin usando la CLI de pprintjson.
Imprime JSON desde una cadena usando la CLI de pprintjson.
Imprime JSON desde una cadena con una sangría de 1.
Imprima JSON desde una cadena y guarde la salida en un archivo output.json.
Salida
fuente
Está lejos de ser perfecto, pero hace el trabajo.
puede mejorarlo, agregar sangría, etc., pero si solo desea poder leer un json más limpio, este es el camino a seguir.
fuente