3647 Stimmen

Wie kann ich JSON in einem Shell-Skript hübsch ausdrucken?

Gibt es ein (Unix-)Shell-Skript zur Formatierung von JSON in menschenlesbarer Form?

Im Grunde genommen möchte ich, dass es das Folgende umwandelt:

{ "foo": "lorem", "bar": "ipsum" }

... zu etwas wie diesem:

{
    "foo": "lorem",
    "bar": "ipsum"
}

0 Stimmen

10 Stimmen

Ich habe vor einiger Zeit meine eigenen gedreht: github.com/exhuma/braindump/tree/master/jsonformat Der Code ist sehr einfach und verwendet Python's eigene json Bibliothek, aber ich habe auch pygments hinzugefügt, um eine Syntaxhervorhebung zu erhalten.

0 Stimmen

Ich bin über diese Seite gestolpert und habe dann Folgendes gefunden Json Hübsch und ich mag es sehr. Typekit verwendet es in ihren API-Beispielen, so gibt es einige klout hinter ihm ^^

54voto

Versuchen Sie pjson . Es hat Farben!

echo '{"json":"obj"} | pjson

Installieren Sie es mit pip :

pip install pjson

Und leiten Sie dann alle JSON-Inhalte an pjson .

0 Stimmen

Es erfordert python-pip (sudo apt-get install python-pip) und dann (sudo pip install pjson) Der große Vorteil sind die Farben!

1 Stimmen

Der Nachteil ist, dass es nicht möglich ist, die farbige Ausgabe zu greppen.

45voto

Techie Punkte 6224

Sie müssen nur jq verwenden Wenn jq nicht installiert ist, müssen Sie jq zuerst installieren.

sudo apt-get update
sudo apt-get install jq

Nachdem Sie jq installiert haben, müssen Sie nur noch jq verwenden

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

Die Ausgabe sieht wie folgt aus

{
  "foo": "lorem",
  "bar": "ipsum"
}

8 Stimmen

または brew install jq wenn Sie einen Mac benutzen.

44voto

darscan Punkte 963

Oder mit Ruby:

echo '{ "foo": "lorem", "bar": "ipsum" }' | ruby -r json -e 'jj JSON.parse gets'

0 Stimmen

Dies führt zu einer Fehlermeldung. Brauchen Sie einige Ruby-Json-Paket installiert?

3 Stimmen

Ja, Sie benötigen das JSON Ruby Gem: sudo gem install json

0 Stimmen

@MatSchaffer Beachten Sie, dass dies nicht funktioniert, wenn Sie JSON zur Serialisierung von Objekten mit benutzerdefinierten to_json Methoden; Kernel#jj druckt nur Arrays und Hashes desselben (oder Zahlen/Strings/Booleans) aus.

42voto

Arpit Rathod Punkte 61

Sie können diesen einfachen Befehl verwenden, um das Ergebnis zu erzielen:

echo "{ \"foo\": \"lorem\", \"bar\": \"ipsum\" }"|python -m json.tool

0 Stimmen

Meiner Meinung nach die beste Antwort. Klein und leicht zu merken und erfordert nicht die Installation von Nicht-Standard-Tools.

0 Stimmen

Python -m json.tool scheint die Reihenfolge der JSON-Objekte nicht beizubehalten.

0 Stimmen

In Python 2 wird sortiert, in 3 wird nicht sortiert github.com/python/cpython/blob/3.8/Lib/json/tool.py

41voto

yar Punkte 2278

Ich benutze jshon um genau das zu tun, was du beschreibst. Laufen Sie einfach:

echo $COMPACTED_JSON_TEXT | jshon

Sie können auch Argumente zur Umwandlung der JSON-Daten übergeben.

0 Stimmen

Danke, jshon ist viel schneller als die Verwendung von Python oder Ruby für dieselbe Aufgabe

2 Stimmen

@Alexander - Wie schnell brauchen Sie einen hübschen Drucker? Ich arbeite mit OSx Lion, auf dem Python vorinstalliert ist. Mit python -mjson.tool kann ich eine 96KB json-Datei in 0,1s hübsch ausdrucken - die json-Ausgabe von earthporn, auf die jshon verlinkt, ist etwa 24KB groß und ich kann das in 0,08s hübsch ausdrucken. Wie viel schneller ist jshon für Sie?

2 Stimmen

Ich arbeite mit 1+GB komprimierten (wer weiß schon, wie groß unkomprimierte) JSON-Datendateien, daher schätze ich den Hinweis, dass jshon schneller ist, sehr.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X