Visualizza l'output di arricciatura in formato JSON leggibile nello script shell Unix


215

Nel mio script della shell Unix, quando eseguo un comando curl, il risultato verrà visualizzato come sotto il quale sto reindirizzando al file:

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

Ma voglio che questo output metta nel formato leggibile JSON come sotto nel file:

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

Come posso formattare l'output in questo modo?

Risposte:


537

Prova a fare questo:

curl ... | json_pp 

o con utilizzando il filtro identità:

curl ... | jq '.'

inserisci qui la descrizione dell'immagine

o con e :

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

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


puoi essere un po 'elaborato qui per favore
Marmellate

1
json_ppsembra formattare i dati in ordine inverso rispetto alle attese. C'è un modo per annullare l'inversione dei dati?
Antonio,

1
json_pp è un'utilità di comando Perl che converte tra alcuni formati di input e output (uno dei quali JSON). Il formato di input predefinito è json e il formato di output predefinito è json con un'opzione carina.
Fabijan Bajo,

3
la soluzione pipe to json_pp è così elegante. grazie
andy

1
Il tubo nel nodo è molto elegante. Grazie!
Matthew Zackschewski,

53

Immagino che tu voglia preimpostare l'output JSON. Ciò potrebbe essere ottenuto utilizzando Python:

curl http://localhost:8880/test.json | python -mjson.tool > out.json

Grazie per aver risposto. Ma non sto usando Python, sto usando shell. mi puoi guidare su shell
Jam

@Jams che esegue python dalla shell dando un output piuttosto stampato.
agconti,

Ottima soluzione poiché Python viene preinstallato.
Gayan Weerakutti,

1
Lo script python genera un errore "pipe spezzata" quando aggiungo un "| head".
Accovacciato Kitten,

@CrouchingKitten Non vedo questo problema da solo (forse versioni diverse), ma ciò potrebbe essere dovuto al headcomando di tagliare l'output che viene convogliato su di esso prima di raggiungere la fine, "rompendo" quindi il tubo. Se si consente headdi consumare l'intero flusso di dati dalla pipe, mi aspetto che l'errore non venga visualizzato.
code_dredd,

19
python -m json.tool
Curl http://127.0.0.1:5000/people/api.json | python -m json.tool

può anche aiutare.


11

È possibile utilizzare questo modulo nodo

[sudo] npm i -g json; // suggerisce di non usare il privilegio di root per installare il modulo del nodo

quindi aggiungere semplicemente |jsondopo il ricciolo. curl http://localhost:8880/test.json |json


11

Questo è da aggiungere alla risposta di Gilles. Esistono molti modi per farlo, ma personalmente preferisco qualcosa di leggero, facile da ricordare e universalmente disponibile (ad es. Fornito con installazioni LTS standard del tuo gusto Linux preferito o facili da installare) su sistemi * nix comuni.

Ecco le opzioni nel loro ordine preferito:

Modulo Python Json.tool

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

pro: quasi disponibile ovunque; contro: nessuna codifica a colori


jq (potrebbe richiedere una volta l'installazione)

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

contro: deve installare jq; pro: codifica a colori e versatile


json_pp (disponibile in Ubuntu 16.04 LTS)

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

Per gli utenti di Ruby

gem install jsonpretty
echo '{"foo": "lorem", "bar": "ipsum"}' | jsonpretty

Grazie @zhenhua! Ho usato cat myFile.json | python -mjson.tool >> myFilePretty.jsonquindi aperto nel mio editor (vim, non odiare) e ho ottenuto i colori.
ESSA

8

Ho trovato json_reformat molto utile. Quindi ho appena fatto quanto segue:

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

questo è tutto!


Se usi Ubuntu puoi trovare json_reformat nel pacchetto yajl-tools.
Kevin,


1

Motivazione: si desidera stampare la risposta JSON preimpostata dopo la richiesta del comando arricciatura.

Soluzione : json_pp - strumento da riga di comando che converte tra alcuni formati di input e output (uno di questi è JSON). Questo programma è stato copiato da json_xs e modificato. Il formato di input predefinito è json e il formato di output predefinito è json con un'opzione carina.

Synposis : json_pp [-v] [-f from_format] [-t to_format] [-json_opt options_to_json1[,options_to_json2[,...]]]

Formula :<someCommand> | json_pp

Esempio :

Richiesta

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

Risposta

{
   "completed" : false,
   "id" : 1,
   "title" : "delectus aut autem",
   "userId" : 1
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.