Mostrar la salida curl en formato JSON legible en un script de shell Unix

Resuelto Jams asked hace 9 años • 0 respuestas

En mi script de shell de Unix, cuando ejecuto un comando curl, el resultado se mostrará como se muestra a continuación y 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 coloque 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?

Jams avatar Dec 02 '14 05:12 Jams
Aceptado

Algunas soluciones para elegir:

jsonjson es una herramienta CLI rápida para trabajar con JSON. Es un script node.js de un solo archivo sin departamentos externos (aparte de node.jsél mismo).

$ echo '{"type":"Bar","id":"1","title":"Foo"}' | json
{
  "type": "Bar",
  "id": "1",
  "title": "Foo"
}

Requerir:

# npm install -g json

json_pp : utilidad de comando disponible en sistemas Linux para decodificación/codificación JSON

echo '{"type":"Bar","id":"1","title":"Foo"}' | json_pp -json_opt pretty,canonical
{
   "id" : "1",
   "title" : "Foo",
   "type" : "Bar"
}

Es posible que desee conservar el -json_opt pretty,canonicalargumento a favor de un orden predecible.


jq: procesador JSON de línea de comandos ligero y flexible. Está escrito en C portátil y no tiene dependencias de tiempo de ejecución.

echo '{"type":"Bar","id":"1","title":"Foo"}' | jq '.'
{
  "type": "Bar",
  "id": "1",
  "title": "Foo"
}

El jqprograma más simple es la expresión ., que toma la entrada y la produce sin cambios como salida.

Para opciones adicionales jqconsulte el manual.


python yq yq: Procesador YAML/XML/TOML de línea de comandos - contenedor jq para documentos YAML, XML, TOML

$ echo '{"type":"Bar","id":"1","title":"Foo"}' | yq
{
  "type": "Bar",
  "id": "1",
  "title": "Foo"
}

ElirLa versión go yq no funciona aquí.


Con la herramienta de línea de comandos xidel para descargar y extraer datos de páginas HTML/XML o JSON-API, usando CSS, XPath 3.0, XQuery 3.0, JSONiq o coincidencia de patrones. También puede crear documentos XML/HTML/JSON nuevos o transformados.

$ echo '{"type":"Bar","id":"1","title":"Foo"}' | xidel -e '$json'
{
  "type": "Bar",
  "id": "1",
  "title": "Foo"
}

conpitón:

echo '{"type":"Bar","id":"1","title":"Foo"}' | python -m json.tool
{
    "id": "1",
    "title": "Foo",
    "type": "Bar"
}

connodejsyintento:

echo '{"type":"Bar","id":"1","title":"Foo"}' | node -p "JSON.stringify( JSON.parse(require('fs').readFileSync(0) ), 0, 1 )"
{
 "type": "Bar",
 "id": "1",
 "title": "Foo"
}
Gilles Quénot avatar Dec 01 '2014 22:12 Gilles Quénot

Supongo que quieres embellecer la salida JSON. Eso podría lograrse usando Python:

curl http://localhost:8880/test.json | python -mjson.tool > out.json
0xbb avatar Dec 01 '2014 22:12 0xbb