Mostrar la salida curl en formato JSON legible en un script de shell Unix
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?
Algunas soluciones para elegir:
json
json es una herramienta CLI rápida para trabajar con JSON. Es un script node.js de un solo archivo sin departamentos externos (aparte denode.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,canonical
argumento 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 jq
programa más simple es la expresión .
, que toma la entrada y la produce sin cambios como salida.
Para opciones adicionales jq
consulte 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"
}
Supongo que quieres embellecer la salida JSON. Eso podría lograrse usando Python:
curl http://localhost:8880/test.json | python -mjson.tool > out.json