¿Cómo puedo imprimir JSON en un script de shell?
Frecuentes
Visto 1,361 veces
3232
¿Existe un script de shell (Unix) para formatear JSON en forma legible por humanos?
Básicamente, quiero que transforme lo siguiente:
{ "foo": "lorem", "bar": "ipsum" }
... en algo como esto:
{
"foo": "lorem",
"bar": "ipsum"
}
30 Respuestas
4693
Con Python 2.6+ puede hacer:
echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool
o, si el JSON está en un archivo, puede hacer:
python -m json.tool my_json.json
si el JSON es de una fuente de Internet como una API, puede usar
curl http://my_url/ | python -m json.tool
Por conveniencia en todos estos casos, puede crear un alias:
alias prettyjson='python -m json.tool'
Para una mayor comodidad con un poco más de escritura para prepararlo:
prettyjson_s() {
echo "$1" | python -m json.tool
}
prettyjson_f() {
python -m json.tool "$1"
}
prettyjson_w() {
curl "$1" | python -m json.tool
}
para todos los casos anteriores. Puedes poner esto en .bashrc
y estará disponible todo el tiempo en shell. Invocarlo como prettyjson_s '{"foo": "lorem", "bar": "ipsum"}'
.
Tenga en cuenta que, como @pnd señaló en los comentarios a continuación, en Python 3.5+, el objeto JSON ya no está ordenado de forma predeterminada. Para ordenar, agregue el --sort-keys
bandera hasta el final. Es decir ... | python -m json.tool --sort-keys
.
Respondido el 18 de diciembre de 20 a las 15:12
Podrías canalizar eso a pygmentize -l javascript
para obtener una salida de color de sintaxis en su línea de comando. Editar: Si tiene pigmentos instalados. - Shrikant Sharat
Una gran respuesta, la única precaución que tengo es sí Ordene las claves en la salida, lo que quizás deba tener en cuenta. - Chris Nash
En myy .vimrc "nnoremap :%! python -m json.tool : w "- imwilsonxu
Esto parece escapar de los caracteres Unicode a \ uXXXX, lo que podría ser una desventaja. - user1071136
Creé un alias: alias pretty='python -mjson.tool | pygmentize -l json
para que pueda ejecutar: command params | pretty
. Espero que esto ayude. PD: Si alguien logra extender esto para a) eliminar la salida curl que veo cada vez y / ob) NO ordenar las claves json; por favor avíseme, estaré muy agradecido. - Clint Eastwood
1164
Puedes usar: jq
¡Es muy simple de usar y funciona muy bien! Puede manejar estructuras JSON muy grandes, incluidas secuencias. Puedes encontrar sus tutoriales aquí.
Ejemplos de uso:
$ jq --color-output file1.json file1.json | less -R
$ command_with_json_output | jq .
$ jq # stdin/"interactive" mode, just enter some JSON
$ jq <<< '{ "foo": "lorem", "bar": "ipsum" }'
{
"bar": "ipsum",
"foo": "lorem"
}
O usar jq
con filtro de identidad:
$ jq '.foo' <<< '{ "foo": "lorem", "bar": "ipsum" }'
"lorem"
Respondido el 23 de junio de 20 a las 15:06
También hay una --sort-keys
opción, que es útil en algunos casos. - Mateo Flaschen
Trabajando con curl: curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.'
- Pase el ratón sobre Ruan
"jq". es genial como una impresora bonita, pero viene con una advertencia: jq (hasta la versión 1.5 de jq inclusive) alterará los valores de números muy grandes y muy pequeños porque analiza valores numéricos como valores IEEE 754 de 64 bits. Para comprobar si su impresora bonita favorita tiene el mismo problema, pruebe este valor: 1e1000. Tenga en cuenta que python -mjson.herramienta falla esta prueba mal porque produce Infinity, que ni siquiera es JSON. - pico
@Meekohi la alternativa es "uso innecesario de echo". Super feliz de haber encontrado el <<<
operador - exactamente lo que estaba buscando. - jchook
jq
es el mejor porque imprime en colores! - phil294
390
Yo uso el argumento "espacio" de JSON.stringify
para imprimir JSON en JavaScript.
Ejemplos:
// Indent with 4 spaces
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, 4);
// Indent with tabs
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, '\t');
Desde la línea de comandos de Unix con Node.js, especificando JSON en la línea de comandos:
$ node -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, '\t'));" \
'{"foo":"lorem","bar":"ipsum"}'
Devoluciones:
{
"foo": "lorem",
"bar": "ipsum"
}
Desde la línea de comandos de Unix con Node.js, especificando un nombre de archivo que contiene JSON y usando una sangría de cuatro espacios:
$ node -e "console.log(JSON.stringify(JSON.parse(require('fs') \
.readFileSync(process.argv[1])), null, 4));" filename.json
Usando una pipa:
echo '{"foo": "lorem", "bar": "ipsum"}' | node -e \
"\
s=process.openStdin();\
d=[];\
s.on('data',function(c){\
d.push(c);\
});\
s.on('end',function(){\
console.log(JSON.stringify(JSON.parse(d.join('')),null,2));\
});\
"
Respondido 09 Abr '19, 13:04
Para depurar objetos en Node.js, realmente debería usar sys.inspect () en lugar de JSON.stringify (). Este es el por qué: markhansen.co.nz/inspección-con-json-stringify - Gurpartap Singh
Voto en contra. El OP se trata de un "script de línea de comandos * nix" y esta respuesta es un contexto diferente. - danorton
@danorton: JS se puede usar desde la línea de comandos a través de node.js y otras soluciones similares. - ternero
No necesita la consola: node -p "JSON.stringify(JSON.parse(process.argv[1]), null, '\t');"
también envía el resultado a STDOUT. - Julian d.
Apesta que el script sea diferente para un nombre de archivo frente a stdin - lukasz wiktor
341
Escribí una herramienta que tiene uno de los mejores formateadores de "espacios en blanco inteligentes" disponibles. Produce una salida más legible y menos detallada que la mayoría de las otras opciones aquí.
Así es como se ve el "espacio en blanco inteligente":
Puede que esté un poco sesgado, pero es una herramienta increíble para imprimir y manipular datos JSON desde la línea de comandos. Es muy fácil de usar y tiene una amplia ayuda / documentación en la línea de comandos. Es una navaja suiza que utilizo para 1001 pequeñas tareas diferentes que serían sorprendentemente molestas de hacer de otra manera.
Último caso de uso: Chrome, Consola de desarrollo, pestaña Red, exportar todo como archivo HAR, "cat site.har | subrayado seleccionar '.url' --outfmt text | grep mydomain"; ahora tengo una lista ordenada cronológicamente de todas las recuperaciones de URL realizadas durante la carga del sitio de mi empresa.
La impresión bonita es fácil:
underscore -i data.json print
La misma cosa:
cat data.json | underscore print
Lo mismo, más explícito:
cat data.json | underscore print --outfmt pretty
Esta herramienta es mi proyecto actual que me apasiona, por lo que si tiene alguna solicitud de funciones, es muy probable que la aborde.
respondido 15 nov., 17:23
También actualicé mi ~ / .bash_profile para tener la siguiente línea: alias underscor = 'underscore print --outfmt pretty' ahora solo puedo hacer curl ejemplo.com/resultado.json | subrayado y seguir utilizando subrayado para otros formatos: gal bracha
¡Gracias Dave! ¡La herramienta es buena! alias pretty-json = "underrsore pretty" y salida de curl agradable a la vista - maximo ponomarev
Gran herramienta de formato, solo una nota: reenviar la salida a un archivo (ya sea con -o opción o con > ) funciona solo con impresión de subrayado. subrayado bonito guarda un archivo con letreros de formato de color que se insertan, algo como: [32m
, [33m
, [39m
junto con algunos no imprimibles antes de cada uno de ellos, lo que hace que JSON no sea válido. Sin emabargo, impresión de subrayado por sí solo no agrega nada a un archivo y hace su trabajo de formateo a la perfección. - tiurín
Amo las jq
pero esto funcionó muy bien para mi "JSON" que no tenía claves entre comillas dobles. - Azul
@DaveDopson gracias por la gran herramienta !! Voy a intentar usarlo junto jsonselect.org/#pruébalo ... - micargo
175
Por lo general, solo hago:
echo '{"test":1,"test2":2}' | python -mjson.tool
Y para recuperar datos seleccionados (en este caso, el valor de "prueba"):
echo '{"test":1,"test2":2}' | python -c 'import sys,json;data=json.loads(sys.stdin.read()); print data["test"]'
Si los datos JSON están en un archivo:
python -mjson.tool filename.json
Si quieres hacerlo todo de una vez con curl
en la línea de comando usando un token de autenticación:
curl -X GET -H "Authorization: Token wef4fwef54te4t5teerdfgghrtgdg53" http://testsite/api/ | python -mjson.tool
respondido 15 nov., 17:23
si se supone que json proviene directamente de una api http, esta también es una buena herramienta implementada en python: github.com/jkbr/httpie - Florian
Si tiene un nodo instalado (y no le importa la salida de estilo YAML) también está este paquete: rafeca.com/prettyjson para que puedas terminar un rizo con | prettyjson
- yolo
Como se señaló anteriormente, uno de los problemas con python -mjson.herramienta como una bonita impresora JSON es que no siempre emite JSON. Por ejemplo, 1e1000 se convierte en Infinity (ya sea usando python 2.xo 3.x). 'jq.' siempre produce JSON, pero no garantiza que los valores muy grandes (o muy pequeños) se conserven exactamente. - pico
90
Gracias a los útiles consejos de JF Sebastian, he aquí un guión ligeramente mejorado que se me ocurrió:
#!/usr/bin/python
"""
Convert JSON data to human-readable form.
Usage:
prettyJSON.py inputFile [outputFile]
"""
import sys
import simplejson as json
def main(args):
try:
if args[1] == '-':
inputFile = sys.stdin
else:
inputFile = open(args[1])
input = json.load(inputFile)
inputFile.close()
except IndexError:
usage()
return False
if len(args) < 3:
print json.dumps(input, sort_keys = False, indent = 4)
else:
outputFile = open(args[2], "w")
json.dump(input, outputFile, sort_keys = False, indent = 4)
outputFile.close()
return True
def usage():
print __doc__
if __name__ == "__main__":
sys.exit(not main(sys.argv))
Respondido 21 Jul 15, 17:07
Cuando los valores se cargan en el diccionario, se pierde el orden: normal dict
los objetos no tienen un orden definido. Intentar json.dumps(json.loads('{"b": 1, "a": 2}'), sort_keys=False)
y encontrará que están intercambiados de todos modos. Para solucionarlo, importa OrderedDict
y load
paso object_pairs_hook=OrderedDict
. - icktoofay
Puede cambiar el script para leer desde la entrada estándar con esto: inputFile = sys.stdin
. Esto le permite canalizar cosas al script de esta manera: curl http://somewhere.com/foo.json | pp_json.py
- gabe johnson
Y para evitar ordenar con el comentario de @ icktoofay, importe OrderedDict así: from collections import OrderedDict
. - Hugo
Gracias @icktoofay. Esto me permitió crear la siguiente función vim: com! FormatJSON %!python -c "from collections import OrderedDict; import sys; import json; j = json.load(sys.stdin, object_pairs_hook=OrderedDict); json.dump(j, sys.stdout, sort_keys=False, indent=4, separators=(',', ': '))"
Tenga en cuenta que los separadores deben establecerse como (',', ':') para evitar que se agreguen espacios en blanco finales: bugs.python.org/issue16333 - moto de nieve ciega
¡Gran fragmento! he usado sort_keys = True
en cambio, porque quiero usar esto para comparar archivos json y funciona como un encanto. - JL Peyret
87
Si usa npm y Node.js, puede hacer npm install -g json
y luego canalice el comando a través de json
. Hacer json -h
para obtener todas las opciones. También puede extraer campos específicos y colorear la salida con -i
.
curl -s http://search.twitter.com/search.json?q=node.js | json
respondido 15 nov., 17:23
81
respondido 16 nov., 17:00
ADVERTENCIA: jq codifica números como flotantes IEEE 754 de 64 bits y, por lo tanto, es probable que cambie su representación. Es probable que se pierda la precisión de números muy pequeños y muy grandes. Para comprobar si su impresora bonita favorita tiene el mismo problema, pruebe este valor: 1e1000. - pico
o simplemente: jq . file.json
; pero también cat file.json | jq
(sin el filtro .
) también funciona. (en ubuntu / linux; ymmv a través de plataformas) - michael
72
Con Perl, use el módulo CPAN JSON::XS
. Instala una herramienta de línea de comandos json_xs
.
Validar:
json_xs -t null < myfile.json
Embellece el archivo JSON src.json
a pretty.json
:
< src.json json_xs > pretty.json
Si no tienes json_xs
, Trate de json_pp
. "pp" es para "perl puro": la herramienta se implementa solo en Perl, sin un enlace a una biblioteca C externa (que es lo que XS significa, "Sistema de extensión" de Perl).
Respondido 03 Feb 17, 18:02
¡Parece ser estándar con Cygwin! - Janus Troelsen
json_pp se puede usar de la misma manera y probablemente se instale fácilmente en su sistema (en Debian está en el paquete 'perl'). - michielb
Para su información, en mi sistema Mac OS X 10.9, json_pp está disponible automáticamente. - Gregg Williams
-t null
me dio nulo: no es un formato válido... pero dejarlo funcionó espléndidamente. Gracias. - Lucas
pp es para perl puro, aquí no se imprime bonito :) Dado que json_xs y json_pp pueden hacer más que solo imprimir bonito y también con -json_opt hacer otras cosas en lugar de imprimir bonito. Aunque la impresión bonita es el comportamiento predeterminado. - Kjetil S.
70
En * nix, leer desde stdin y escribir en stdout funciona mejor:
#!/usr/bin/env python
"""
Convert JSON data to human-readable form.
(Reads from stdin and writes to stdout)
"""
import sys
try:
import simplejson as json
except:
import json
print json.dumps(json.loads(sys.stdin.read()), indent=4)
sys.exit(0)
Pon esto en un archivo (llamé al mío "prettyJSON" después de Congreso Nacional Africanorespuesta) en su RUTA y chmod +x
y listo.
Respondido 02 ago 17, 09:08
De hecho, usar stdin / stdout es mucho más flexible y simple. Gracias por mencionarlo. - Congreso Nacional Africano
Para programas que esperan un archivo con nombre, use / dev / stdin, lo mismo para out y err. - dvogel
Para su información fileinput.input()
lee de stdin si no hay archivos dados en una línea de comandos. Ejemplo - jfs
fileinput.input () no puede tratar bien con archivos sin nueva línea al final, la última vez que verifiqué. - zachary vance
pregunta en un script de shell, no en Python en otro lenguaje. Con JQ puedes hacerlo a la perfección. - Bui Anh Tuan
65
JSON Ruby Gem se incluye con un script de shell para embellecer JSON:
sudo gem install json
echo '{ "foo": "bar" }' | prettify_json.rb
Descarga de script: gist.github.com/3738968
Respondido el 17 de Septiembre de 12 a las 20:09
Tenga en cuenta que esta solución decodifica las secuencias de escape unicode "\ uxxxx", a diferencia de la de Python con json.tool
. Sin embargo, también parece tener limitaciones de profundidad de anidación (nesting of 20 is too deep (JSON::NestingError)
). - a3nm
en Ubuntu puedes hacer: sudo apt-get install ruby-json-pure
en lugar de gem install
- Janus Troelsen
`` `eric-mbp: ~ ericstob $ sudo gem install json Contraseña: Obteniendo: json-1.7.3.gem (100%) Construyendo extensiones nativas. Esto podría llevar un tiempo ... Se instaló correctamente json-1.7.3 1 gema instalada Instalando documentación ri para json-1.7.3 ... Instalando documentación RDoc para json-1.7.3 ... eric-mbp: ~ ericstob $ prettify_json .rb -bash: prettify_json.rb: comando no encontrado - eric hartford
tal vez podrías publicar el contenido de tu prettify_json.rb
? - Andrés
Puede descargar el script, moverlo a su ~/bin
carpeta (asegúrese de que esté en su RUTA) cambie el nombre prettify_json.rb
a ppj
y correr chmod +x ppj
. Ahora puedes hacer algo como curl www.jsonsring.com/something.json | ppj
- Uri
62
un script bash simple para una bonita impresión json
json_pretty.sh
#/bin/bash
grep -Eo '"[^"]*" *(: *([0-9]*|"[^"]*")[^{}\["]*|,)?|[^"\]\[\}\{]*|\{|\},?|\[|\],?|[0-9 ]*,?' | awk '{if ($0 ~ /^[}\]]/ ) offset-=4; printf "%*c%s\n", offset, " ", $0; if ($0 ~ /^[{\[]/) offset+=4}'
Ejemplo:
cat file.json | json_pretty.sh
Respondido 28 Abr '19, 12:04
Gracias por la respuesta. Hoy escribí este script para uso personal y funcionó bien en mis casos. Hice arreglos, ahora es más pequeño y sin este problema. No hay un objetivo para admitir completamente el formato, pero puedo hacer otras correcciones si es necesario. - Yevgeny Karpov
Esa es la única respuesta de trabajo que encontré. Tengo un linux incrustado, sin rubby, sin javascript, sin acceso a Internet para descargar módulos de Python ... Tengo un awk ligeramente diferente que no es compatible %*c
notación, así que cambié la printf
a c=0; while (c++<offset) printf " "; printf $0;
. Y mi awk tiene diferentes expresiones regulares que escapan y la barra invertida no funciona en []
. Cambié las expresiones regulares a /^[[{]/
y /[]}]/
. - Zaboj Campula
Esto debería ser aceptado, ya que es completamente nativo y no requiere software de terceros ... - Blag
@EvgenyKarpov buena captura, no es necesario un retroceso completo, solo el grep
que fue borrado por error;) - Blag
Gracias amigo, quería una forma rápida de formatear un json de una sola línea de 8 MB, en bash simple. - ahmed m
58
ACTUALIZACIÓN Estoy usando jq
ahora como se sugiere en otra respuesta. Es extremadamente poderoso para filtrar JSON, pero, en su forma más básica, también es una forma increíble de imprimir JSON para su visualización.
jsonpp es una bonita impresora JSON de línea de comandos muy agradable.
Del README:
Respuestas de servicio web bastante impresas como esta:
curl -s -L http://<!---->t.co/tYTq5Pu | jsonpp
y embellece los archivos que se ejecutan en tu disco:
jsonpp data/long_malformed.json
Si está en Mac OS X, puede brew install jsonpp
. Si no es así, simplemente puede copiar el binario en algún lugar de su $PATH
.
respondido 15 nov., 17:23
Probé jsonpp (utilizado en el pasado con éxito) contra un archivo enorme (> 60 MB). Lo detuve después de 5 minutos. Lo conecté a python -mjson.tool
(de otra respuesta aquí) y tomó 10-20 segundos ... - volker
60 MB de JSON? ¡Guau! Normalmente no trato con archivos tan grandes pero útiles de conocer. Gracias. - jordelver
En mi caja de ubuntu tengo un json_pp
- que formatea json muy bien, aunque a pesar de la similitud en los nombres, creo que este es un proyecto completamente diferente del jsonpp
mencionado aquí - davidpricedev
56
Así es como lo hago:
curl yourUri | json_pp
Acorta el código y hace el trabajo.
respondido 15 nov., 17:23
Servidor Ubuntu: si tiene máquinas de producción con instalaciones muy restringidas, esta podría ser la mejor opción, ya que se instala de forma predeterminada con un nombre específico. Python a menudo se instala de diferentes maneras (por ejemplo, python3, python o nada) dependiendo de la versión. - Jonathanjo
54
$ echo '{ "foo": "lorem", "bar": "ipsum" }' \
> | python -c'import fileinput, json;
> print(json.dumps(json.loads("".join(fileinput.input())),
> sort_keys=True, indent=4))'
{
"bar": "ipsum",
"foo": "lorem"
}
NOTA: no es al forma de hacerlo
Lo mismo en Perl:
$ cat json.txt \
> | perl -0007 -MJSON -nE'say to_json(from_json($_, {allow_nonref=>1}),
> {pretty=>1})'
{
"bar" : "ipsum",
"foo" : "lorem"
}
Nota 2: si ejecuta
echo '{ "Düsseldorf": "lorem", "bar": "ipsum" }' \
| python -c'import fileinput, json;
print(json.dumps(json.loads("".join(fileinput.input())),
sort_keys=True, indent=4))'
la palabra de fácil lectura se codifica en \ u
{
"D\u00fcsseldorf": "lorem",
"bar": "ipsum"
}
Si el resto de su canalización manejará correctamente Unicode y desea que su JSON también sea amigable para los humanos, simplemente utilizan el ensure_ascii=False
echo '{ "Düsseldorf": "lorem", "bar": "ipsum" }' \
| python -c'import fileinput, json;
print json.dumps(json.loads("".join(fileinput.input())),
sort_keys=True, indent=4, ensure_ascii=False)'
y obtendrá:
{
"Düsseldorf": "lorem",
"bar": "ipsum"
}
Respondido el 19 de Septiembre de 16 a las 00:09
en realidad hago lo mismo pero con javascript en sí :) - Roberto Gould
En la versión del módulo JSON que tengo, to_json
no parece aceptar opciones. Pero esto funciona: perl -MJSON -nE 'say JSON->new->pretty->encode(from_json $_)' text.json
- Rord
El ejemplo de Python podría simplificarse. Es mucho más fácil canalizar la salida JSON directamente a python -m json.tool
. - dwlz
@Dan: sí. Y hay varias respuestas que muestran json.tool
ejemplos de código. 1. esta versión le permite cambiar algunos parámetros, por ejemplo, indent
2. En el momento de la publicación (2008) todavía se usaba Python 2.4 eso no soporta -mjson.tool
- jfs
53
Intente pjson
. ¡Tiene colores!
Instalarlo con pip
:
⚡ pip install pjson
Y luego canalice cualquier contenido JSON a pjson
.
respondido 15 nov., 17:23
Requiere python-pip (sudo apt-get install python-pip) y luego (sudo pip install pjson) ¡La gran ventaja son los colores! - Kristjan Adojaan
La desventaja es que no es posible grep de la salida en color. - Kristjan Adojaan
40
yo suelo jshon para hacer exactamente lo que estás describiendo. Solo corre:
echo $COMPACTED_JSON_TEXT | jshon
También puede pasar argumentos para transformar los datos JSON.
respondido 15 nov., 17:23
Gracias, jshon es mucho más rápido que usar Python o Ruby para la misma tarea. Alexander
@Alexander - ¿Qué tan rápido necesitas una impresora bonita? Estoy en OSx Lion que viene con Python preinstalado. Con python -mjson.tool puedo imprimir bastante un archivo json de 96KB en 0.1s: la salida json de earthporn a la que se vincula jshon es de aproximadamente 24KB y puedo imprimir eso en 0.08s. ¿Cuánto más rápido es jshon para ti? - joensson
Estoy trabajando con archivos de datos JSON comprimidos de 1 + GB (quién sabe incluso el tamaño sin comprimir), por lo que aprecio mucho la sugerencia de que jshon es más rápido. - ryan ballantyne
40
Puede utilizar este sencillo comando para lograr el resultado:
echo "{ \"foo\": \"lorem\", \"bar\": \"ipsum\" }"|python -m json.tool
Respondido 09 Abr '19, 14:04
La mejor respuesta en mi opinión. Pequeño y fácil de recordar y no requiere la instalación de herramientas no estándar. - Eugenio C
python -m json.tool no parece preservar el orden del objeto JSON. - empujarNpop
Hace clasificación en Python 2, en 3 no clasifica github.com/python/cpython/blob/3.8/Lib/json/tool.py - Preguntas difíciles
38
O, con Ruby:
echo '{ "foo": "lorem", "bar": "ipsum" }' | ruby -r json -e 'jj JSON.parse gets'
Respondido 21 Oct 09, 10:10
Eso me da un error. ¿Necesita instalar algún paquete ruby json? - mjs
Sí, necesita JSON Ruby Gem: sudo gem install json - Darscan
@MatSchaffer Tenga en cuenta que esto no funciona si está utilizando JSON para serializar objetos con to_json
métodos; Kernel#jj
solo imprime matrices y hashes de lo mismo (o números / cadenas / booleanos). - Phrogz
En Windows, intente esto: echo { "foo": "lorem", "bar": "ipsum" } | ruby -r json -e 'jj JSON.parse gets'
- ross attrill
36
Comprar Jazor. Es un analizador JSON de línea de comandos simple escrito en Ruby.
gem install jazor
jazor --help
Respondido el 25 de enero de 11 a las 18:01
¿Soy solo yo o esta es la única sugerencia que realmente responde a la pregunta del OP? Vine aquí buscando un comando simple en el que pudiera canalizar la salida de curl
y este es el único que lo hizo por mí. - leo casarani
Me gusta que tiene la opción de colorear la salida. Lo hace más fácil de leer. - Andrés
ooh también me gusta la opción de pasar una URL ya que estoy usando esto para ver la salida de mi API REST - Andrés
31
JSONLint tiene un implementación de código abierto en GitHub que se puede usar en la línea de comandos o se puede incluir en un proyecto de Node.js.
npm install jsonlint -g
y luego
jsonlint -p myfile.json
or
curl -s "http://api.twitter.com/1/users/show/user.json" | jsonlint | less
Respondido 09 Abr '19, 14:04
Recomiendo no instalar las dependencias de nodejs / npm globalmente => Yo usaría npx
en lugar: curl -s "http://api.twitter.com/1/users/show/user.json" | npx jsonlint | less
(es decir, no npm install
necesario) - adrien joly
29
Simplemente canalice la salida a jq .
.
Ejemplo:
twurl -H ads-api.twitter.com '.......' | jq .
Respondido 03 Feb 17, 18:02
Buena respuesta @Ackshaey Singh y también se puede redirigir fácilmente a un archivo. p.ej cat <file_name.txt> | jq . > <output_name.txt>
- Pramit
brew install jq
si estás en mac os. - disdos
Desafortunadamente, usando jq .
para la impresión bonita tiene uno posible inconveniente: todas las versiones existentes de jq insisten en tratar los números JSON como números IEEE, por lo que la precisión se pierde fácilmente, por ejemplo, para enteros muy grandes. - pico
@Pramita cat file |
es invariablemente un desperdicio de un proceso; solo haz jq . <file_name.txt >output_name.txt
(con literal <
y >
caracteres). - mark Reed
24
Con Perl, si instala JSON :: PP de CPAN obtendrá el json_pp mando. Robando el ejemplo a partir de octubre XNUMX B Bycroft usted obtiene:
[pdurbin@beamish ~]$ echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp
{
"bar" : "ipsum",
"foo" : "lorem"
}
Vale la pena mencionar que json_pp
viene preinstalado con Ubuntu 12.04 (al menos) y Debian en /usr/bin/json_pp
contestado el 23 de mayo de 17 a las 12:05
24
pigmentar
Combino json.tool de Python con pygmentize:
echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g
Hay algunas alternativas a pygmentize que se enumeran en mi esta respuesta.
Aquí hay una demostración en vivo:
respondido 15 nov., 17:23
24
Simplemente puede usar herramientas estándar como jq o json_pp.
echo '{ "foo": "lorem", "bar": "ipsum" }' | json_pp
or
echo '{ "foo": "lorem", "bar": "ipsum" }' | jq
ambos embellecerán la salida como la siguiente (jq aún más colorida):
{
"foo": "lorem",
"bar": "ipsum"
}
La gran ventaja de jq es que puede hacer MUCHO más si desea analizar y procesar el json.
Respondido el 30 de Septiembre de 19 a las 14:09
json_pp estaba en mi Mac, pero no jq. ¡Gracias! - David H
@DavidH - ¿esto ayuda? stackoverflow.com/questions/37668134/… - Schmitzi
20
Recomiendo usar la utilidad de línea de comando json_xs que se incluye en el módulo perl JSON :: XS. JSON :: XS es un módulo de Perl para serializar / deserializar JSON, en una máquina Debian o Ubuntu puede instalarlo así:
sudo apt-get install libjson-xs-perl
Obviamente, también está disponible en CPAN.
Para usarlo para formatear JSON obtenido de una URL, puede usar curl o wget de esta manera:
$ curl -s http://page.that.serves.json.com/json/ | json_xs
o esto:
$ wget -q -O - http://page.that.serves.json.com/json/ | json_xs
y para formatear JSON contenido en un archivo puede hacer esto:
$ json_xs < file-full-of.json
Para reformatear como Ñame, que algunas personas consideran más legible por humanos que JSON:
$ json_xs -t yaml < file-full-of.json
respondido 15 nov., 17:23
19
jj es súper rápido, puede manejar documentos JSON descomunales de manera económica, no se mete con números JSON válidos y es fácil de usar, p. ej.
jj -p # for reading from STDIN
or
jj -p -i input.json
Es (2018) todavía bastante nuevo, por lo que tal vez no maneje JSON inválido de la manera esperada, pero es fácil de instalar en las principales plataformas.
Respondido 02 ago 18, 16:08
17
bat
es un cat
clonar con resaltado de sintaxis:
Ejemplo:
echo '{"bignum":1e1000}' | bat -p -l json
-p
saldrá sin encabezados, y -l
especificará explícitamente el idioma.
Tiene colores y formato para JSON y no no tiene los problemas señalados en este comentario: ¿Cómo puedo imprimir JSON en un script de shell?
Respondido 09 Abr '19, 14:04
16
Respondido el 15 de Septiembre de 17 a las 21:09
14
Instale yajl-tools con el siguiente comando:
sudo apt-get install yajl-tools
entonces,
echo '{"foo": "lorem", "bar": "ipsum"}' | json_reformat
Respondido 08 Jul 20, 00:07
Impresionante. No requiere otro idioma / intérprete y está en el repositorio del paquete, ¡no es necesario prepararlo! - jose lujuria
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas json unix command-line format pretty-print or haz tu propia pregunta.
stackoverflow.com/a/12892039/998291 - shleim
Rodé el mío hace un rato: github.com/exhuma/braindump/tree/master/jsonformat El código es muy simple, usando el propio Python
json
biblioteca, pero también agregué pigmentos para resaltar la sintaxis. - exhumaTropecé con esto pero luego encontré Json bastante y me gusta bastante. Typekit lo usa en sus ejemplos de API, por lo que hay algo de klout detrás ^^ - Nick Tomlin
Si no le importa copiar y pegar, también hay algunas herramientas sencillas en línea como jsonprettyprint.net donde puede imprimir rápidamente su JSON sin procesar. - Javaaaa
Ten cuidado python -m json.herramienta no siempre produce JSON válido. (Pista: 1e1000) - peak