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?

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/


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


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.


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


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

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!


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


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
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.