python - txt - ¿Cómo imprimir un archivo JSON?
imprimir en python (7)
Pygementize + Python json.tool = Impresión bonita con resaltado de sintaxis
Pygmentize es una herramienta asesina. Mira esto.
Combino python json.tool con pygmentize
echo ''{"foo": "bar"}'' | python -m json.tool | pygmentize -l json
Vea el enlace de arriba para las instrucciones de instalación de pygmentize.
Una demostración de esto está en la imagen de abajo:
Tengo un archivo JSON que es un lío que quiero imprimir: ¿cuál es la forma más sencilla de hacerlo 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.
El módulo json
ya implementa una impresión bastante básica con el parámetro de indent
:
>>> import json
>>>
>>> your_json = ''["foo", {"bar":["baz", null, 1.0, 2]}]''
>>> parsed = json.loads(your_json)
>>> print json.dumps(parsed, indent=4, sort_keys=True)
[
"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)
Este es un ejemplo sencillo de cómo imprimir de forma agradable JSON a la consola de forma agradable en Python, sin requerir que JSON esté en su computadora como un archivo local:
import pprint
import json
from urllib.request import urlopen # (Only used to get this example)
# Getting a JSON example for this example
r = urlopen("https://mdn.github.io/fetch-examples/fetch-json/products.json")
text = r.read()
# To print it
pprint.pprint(json.loads(text))
Para poder imprimir desde la línea de comandos y tener control sobre la sangría, etc. puede configurar un alias similar a este:
alias jsonpp="python -c ''import sys, json; print json.dumps(json.load(sys.stdin), sort_keys=True, indent=2)''"
Y luego usa el alias de una de estas maneras:
cat myfile.json | jsonpp
jsonpp < myfile.json
Podrías usar el pprint .
Cómo puedes leer el archivo con datos json e imprimirlo.
import json
import pprint
with open(''filename.txt'', ''r'') as f:
data = f.read()
json_data = json.loads(data)
pprint.pprint(json_data)
Puedes hacer esto en la línea de comando:
cat some.json | python -m json.tool
(como ya se ha mencionado en los comentarios a la pregunta).
En realidad, Python no es mi herramienta favorita en lo que respecta al procesamiento json en la línea de comandos. Para una impresión simple, está bien, pero si desea manipular el json puede complicarse demasiado. Pronto necesitarás escribir un archivo de script por separado, podrías terminar con mapas cuyas claves son u "some-key" (Python Unicode), lo que dificulta la selección de campos y no va en la dirección de bastante -impresión.
Yo uso jq . Lo anterior se puede hacer con:
cat some.json | jq ''''
y obtienes colores como bonificación (y mucho más fácil de extender).
Usa esta función y no te preocupes por recordar si tu JSON es un str
o dict
nuevamente - solo mira la letra bonita:
import json
def pp_json(json_thing, sort=True, indents=4):
if type(json_thing) is str:
print(json.dumps(json.loads(json_thing), sort_keys=sort, indent=indents))
else:
print(json.dumps(json_thing, sort_keys=sort, indent=indents))
return None
pp_json(your_json_string_or_dict)