Mostrar salida de rizo en formato JSON legible en script de shell Unix

215

En mi script de shell de Unix, cuando ejecuto un comando curl, el resultado se mostrará como a continuación, que estoy redirigiendo al archivo:

{"type":"Show","id":"123","title":"name","description":"Funny","channelTitle":"ifood.tv","lastUpdateTimestamp":"2014-04-20T20:34:59","numOfVideos":"15"}

Pero, quiero que esta salida se ponga en el formato JSON legible como se muestra a continuación en el archivo:

{"type":"Show",
"id":"123",
"title":"name",
"description":"Funny",
"channelTitle":"ifood.tv",
"lastUpdateTimestamp":"2014-04-20T20:34:59",
"numOfVideos":"15"}

¿Cómo formateo la salida de esta manera?

Enjambres
fuente

Respuestas:

537

Intenta hacer esto:

curl ... | json_pp 

o con usando el filtro de identidad:

curl ... | jq '.'

ingrese la descripción de la imagen aquí

o con y :

curl ... | node <<< "var o = $(cat); console.log(JSON.stringify(o, null, 4));"

Verifique https://stedolan.github.io/jq/

Gilles Quenot
fuente
¿Puedes ser un poco elaborada aquí por favor
Jams
1
json_ppparece formatear los datos en orden inverso al esperado. ¿Hay alguna manera de deshacer los datos?
Antonio
1
json_pp es una utilidad de comando Perl que convierte entre algunos formatos de entrada y salida (uno de ellos JSON). El formato de entrada predeterminado es json y el formato de salida predeterminado es json con una bonita opción.
Fabijan Bajo
3
La solución pipe to json_pp es muy elegante. gracias
andy
1
La tubería en el nodo es muy elegante. ¡Gracias!
Matthew Zackschewski
53

Supongo que desea embellecer la salida JSON. Eso podría lograrse usando python:

curl http://localhost:8880/test.json | python -mjson.tool > out.json
0xbb
fuente
Gracias por responder. Pero no estoy usando Python, estoy usando shell. ¿Puedes guiarme en Shell
Jams
@Jams que ejecuta Python desde el shell, lo que le da una salida bastante impresa.
agconti
Gran solución ya que Python viene preinstalado.
Gayan Weerakutti
1
Ese script de Python da un error de "tubería rota" cuando le agrego una "cabeza".
Crouching Kitten
@CrouchingKitten No veo ese problema yo mismo (tal vez versiones diferentes), pero eso puede deberse a que el headcomando corta la salida que se canaliza antes de llegar al final, por lo tanto, "rompe" la tubería. Si permite headconsumir todo el flujo de datos de la tubería, espero que el error no aparezca.
code_dredd
19
python -m json.tool
Curl http://127.0.0.1:5000/people/api.json | python -m json.tool

También puede ayudar.

Vishnu
fuente
12

Esto es para agregar a la respuesta de Gilles. Hay muchas maneras de hacer esto, pero personalmente prefiero algo liviano, fácil de recordar y universalmente disponible (por ejemplo, viene con instalaciones LTS estándar de su sabor preferido de Linux o fácil de instalar) en sistemas comunes * nix.

Aquí están las opciones en su orden preferido:

Módulo Python Json.tool

echo '{"foo": "lorem", "bar": "ipsum"}' | python -mjson.tool

pros: casi disponible en todas partes; Contras: sin codificación de color


jq (puede requerir una sola instalación)

echo '{"foo": "lorem", "bar": "ipsum"}' | jq

contras: necesita instalar jq; pros: codificación de colores y versatilidad


json_pp (disponible en Ubuntu 16.04 LTS)

echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp

Para usuarios de Ruby

gem install jsonpretty
echo '{"foo": "lorem", "bar": "ipsum"}' | jsonpretty
Zhenhua
fuente
Gracias @zhenhua! Solía cat myFile.json | python -mjson.tool >> myFilePretty.jsonabrir en mi editor (vim, no odies) y obtuve colores.
essa
11

Puedes usar este módulo de nodo

[sudo] npm i -g json; // sugiero no usar el privilegio de root para instalar el módulo de nodo

luego simplemente agregue |jsondespués del rizo. curl http://localhost:8880/test.json |json

NanoNova
fuente
8

Encontré que json_reformat es muy útil. Así que acabo de hacer lo siguiente:

curl http://127.0.0.1:5000/people/api.json | json_reformat

¡Eso es!

Rapaz
fuente
Si usa Ubuntu, puede encontrar json_reformat en el paquete yajl-tools.
Kevin
5

Mira curljson

$ pip install curljson
$ curljson -i <the-json-api-url>
mitnk
fuente
1

Motivación: desea imprimir la respuesta JSON de prettify después de la solicitud de comando curl.

Solución : json_pp : herramienta de línea de comandos que convierte entre algunos formatos de entrada y salida (uno de ellos es JSON). Este programa se copió de json_xs y se modificó. El formato de entrada predeterminado es json y el formato de salida predeterminado es json con una bonita opción.

Síntesis : json_pp [-v] [-f from_format] [-t to_format] [-json_opt options_to_json1[,options_to_json2[,...]]]

Fórmula :<someCommand> | json_pp

Ejemplo :

Solicitud

curl -X https://jsonplaceholder.typicode.com/todos/1 | json_pp 

Respuesta

{
   "completed" : false,
   "id" : 1,
   "title" : "delectus aut autem",
   "userId" : 1
}
avivamg
fuente