Zeigen Sie die Curl-Ausgabe im lesbaren JSON-Format im Unix-Shell-Skript an

213

Wenn ich in meinem Unix-Shell-Skript einen Curl-Befehl ausführe, wird das Ergebnis wie folgt angezeigt: Ich leite es in die Datei um:

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

Ich möchte jedoch, dass diese Ausgabe im lesbaren JSON-Format wie unten in der Datei angezeigt wird:

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

Wie formatiere ich die Ausgabe auf diese Weise?

Marmeladen
quelle

Antworten:

531

Versuchen Sie Folgendes:

curl ... | json_pp 

oder mit Verwenden des Identitätsfilters:

curl ... | jq '.'

Geben Sie hier die Bildbeschreibung ein

oder mit und ::

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

Überprüfen Sie https://stedolan.github.io/jq/

Gilles Quenot
quelle
1
Versuchen Sie es zuerst, ohne zu einer Datei umzuleiten. Haben Sie getestet, ob json_pp oder jq installiert ist? Es kommt mit Perl
Gilles Quenot
1
json_ppscheint Daten in umgekehrter Reihenfolge zu formatieren als erwartet. Gibt es eine Möglichkeit, Daten rückgängig zu machen?
Antonio
1
json_pp ist ein Perl-Befehlsdienstprogramm, das zwischen einigen Eingabe- und Ausgabeformaten (eines davon JSON) konvertiert. Das Standardeingabeformat ist json und das Standardeingabeformat ist json mit hübscher Option.
Fabijan Bajo
3
Die Pipe zur json_pp-Lösung ist so elegant. danke
andy
1
Das Rohr in den Knoten ist sehr elegant. Vielen Dank!
Matthew Zackschewski
53

Ich vermute, dass Sie die JSON-Ausgabe verschönern möchten. Dies könnte mit Python erreicht werden:

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

0xbb
quelle
Danke für die Antwort. Aber ich benutze nicht Python, ich benutze Shell.
Jams
@Jams, das Python über die Shell ausführt und eine hübsche gedruckte Ausgabe liefert.
Agconti
Tolle Lösung, da Python vorinstalliert ist.
Gayan Weerakutti
1
Dieses Python-Skript gibt einen "defekten Pipe" -Fehler aus, wenn ich einen "| head" hinzufüge.
Hockendes Kätzchen
@CrouchingKitten Ich sehe dieses Problem selbst nicht (möglicherweise verschiedene Versionen), aber das kann daran liegen, dass der headBefehl die Ausgabe abschneidet, die vor dem Ende an sie weitergeleitet wird, wodurch die Leitung "gebrochen" wird. Wenn Sie zulassen head, dass der gesamte Datenstrom aus der Pipe verwendet wird, wird der Fehler voraussichtlich nicht angezeigt.
code_dredd
19
python -m json.tool
Curl http://127.0.0.1:5000/people/api.json | python -m json.tool

kann auch helfen.

Vishnu
quelle
11

Sie können dieses Knotenmodul verwenden

[sudo] npm i -g json;; // Schlage vor, kein Root-Privileg zu verwenden, um das Knotenmodul zu installieren

dann einfach |jsonnach dem locken anhängen . curl http://localhost:8880/test.json |json

NanoNova
quelle
11

Dies ist eine Ergänzung zu Gilles 'Antwort. Es gibt viele Möglichkeiten, dies zu erreichen, aber ich persönlich bevorzuge etwas Leichtes, leicht zu merkendes und universell verfügbares (z. B. mit Standard-LTS-Installationen Ihrer bevorzugten Linux-Version oder einfach zu installieren) auf gängigen * nix-Systemen.

Hier sind die Optionen in ihrer bevorzugten Reihenfolge:

Python Json.tool-Modul

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

Profis: fast überall verfügbar; Nachteile: keine Farbcodierung


jq (erfordert möglicherweise eine einmalige Installation)

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

Nachteile: muss jq installieren; Profis: Farbcodierung und vielseitig


json_pp (verfügbar in Ubuntu 16.04 LTS)

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

Für Ruby-Benutzer

gem install jsonpretty
echo '{"foo": "lorem", "bar": "ipsum"}' | jsonpretty
Zhenhua
quelle
Danke @zhenhua! Ich habe cat myFile.json | python -mjson.tool >> myFilePretty.jsondann in meinem Editor geöffnet (vim, hasse nicht) und habe Farben bekommen.
Essa
8

Ich fand json_reformat sehr praktisch. Also habe ich einfach folgendes gemacht:

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

das ist es!

Raubvogel
quelle
Wenn Sie Ubuntu verwenden, finden Sie json_reformat im yajl-tools-Paket.
Kevin
5

Schauen Sie sich curljson an

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

Motivation: Sie möchten eine hübsche JSON-Antwort nach einer Curl-Befehlsanforderung drucken.

Lösung : json_pp - Befehlszeilentool , das zwischen einigen Eingabe- und Ausgabeformaten konvertiert (eines davon ist JSON). Dieses Programm wurde von json_xs kopiert und geändert. Das Standardeingabeformat ist json und das Standardeingabeformat ist json mit hübscher Option.

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

Formel :<someCommand> | json_pp

Beispiel :

Anfrage

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

Antwort

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