Gibt es ein (Unix-) Shell-Skript zum Formatieren von JSON in lesbarer Form?
Grundsätzlich möchte ich, dass es Folgendes transformiert:
{ "foo": "lorem", "bar": "ipsum" }
... in so etwas:
{
"foo": "lorem",
"bar": "ipsum"
}
Gibt es ein (Unix-) Shell-Skript zum Formatieren von JSON in lesbarer Form?
Grundsätzlich möchte ich, dass es Folgendes transformiert:
{ "foo": "lorem", "bar": "ipsum" }
... in so etwas:
{
"foo": "lorem",
"bar": "ipsum"
}
json
Bibliothek, aber ich habe auch Pygemente hinzugefügt, um die Syntax hervorzuheben.Antworten:
Mit Python 2.6+ können Sie einfach Folgendes tun:
Wenn sich der JSON in einer Datei befindet, können Sie Folgendes tun:
Wenn der JSON aus einer Internetquelle wie einer API stammt, können Sie ihn verwenden
In all diesen Fällen können Sie der Einfachheit halber einen Alias erstellen:
Für noch mehr Komfort mit etwas mehr Eingabe, um es fertig zu machen:
für alle oben genannten Fälle. Sie können dies eingeben
.bashrc
und es wird jedes Mal in der Shell verfügbar sein. Rufe es wie aufprettyjson_s '{"foo": "lorem", "bar": "ipsum"}'
.quelle
pygmentize -l javascript
um eine syntaxfarbene Ausgabe in Ihrer Befehlszeile zu erhalten. Bearbeiten : Wenn Sie Pygements installiert haben, ist das.alias pretty='python -mjson.tool | pygmentize -l json
damit ich einfach ausführen kann :command params | pretty
. Hoffe das hilft. PS: Sollte es jemandem gelingen, dies zu erweitern, um a) die Curl-Ausgabe, die ich jedes Mal sehe, zu entfernen und / oder b) die JSON-Schlüssel NICHT zu sortieren; Bitte lassen Sie es mich wissen, ich werde sehr dankbar sein.Sie können verwenden:
jq
Es ist sehr einfach zu bedienen und funktioniert hervorragend! Es kann sehr große JSON-Strukturen, einschließlich Streams, verarbeiten. Ihre Tutorials finden Sie hier .
Anwendungsbeispiele:
Das . ist der Identitätsfilter.
quelle
--sort-keys
Option, die in einigen Fällen hilfreich ist.curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.'
echo '{ "foo": "lorem", "bar": "ipsum" }' | jq . > myfile
.<<<
Betreiber gefunden zu haben - genau das, wonach ich gesucht habe.Ich benutze das "Leerzeichen" -Argument von
JSON.stringify
, um JSON in JavaScript hübsch zu drucken.Beispiele:
Geben Sie in der Unix-Befehlszeile mit Node.js JSON in der Befehlszeile an:
Kehrt zurück:
Geben Sie in der Unix-Befehlszeile mit Node.js einen Dateinamen an, der JSON enthält, und verwenden Sie einen Einzug mit vier Leerzeichen:
Mit einem Rohr:
quelle
node -p "JSON.stringify(JSON.parse(process.argv[1]), null, '\t');"
Das Ergebnis wird auch an STDOUT ausgegeben.Ich habe ein Tool geschrieben, das einen der besten verfügbaren "Smart Whitespace" -Formatierer enthält. Es erzeugt eine besser lesbare und weniger ausführliche Ausgabe als die meisten anderen Optionen hier.
Unterstrich-Cli
So sieht "Smart Whitespace" aus:
Ich bin vielleicht ein bisschen voreingenommen, aber es ist ein großartiges Tool zum Drucken und Bearbeiten von JSON-Daten über die Befehlszeile. Es ist sehr benutzerfreundlich und verfügt über eine umfangreiche Hilfe / Dokumentation zur Befehlszeile. Es ist ein Schweizer Taschenmesser, das ich für 1001 verschiedene kleine Aufgaben verwende, die auf andere Weise überraschend ärgerlich wären.
Letzter Anwendungsfall: Chrome, Dev-Konsole, Registerkarte "Netzwerk", alle als HAR-Datei exportieren, "cat site.har | Unterstrich select '.url' --outfmt text | grep mydomain"; Jetzt habe ich eine chronologisch geordnete Liste aller URL-Abrufe, die beim Laden der Website meines Unternehmens erstellt wurden.
Hübsches Drucken ist einfach:
Gleiche Sache:
Gleiches, expliziter:
Dieses Tool ist mein aktuelles Leidenschaftsprojekt. Wenn Sie also Feature-Anfragen haben, besteht eine gute Chance, dass ich diese anspreche.
quelle
[32m
,[33m
,[39m
zusammen mit einigen nicht-druckbare vor jedem von ihnen, die JSON nicht gültig machen. Allerdings Strich Druck allein nicht alles in eine Datei hinzufügen , und macht seinen Job Formatierung perfekt.jq
aber das hat großartig funktioniert für meinen "JSON", der keine doppelt zitierten Schlüssel hatte.Normalerweise mache ich einfach:
Und um ausgewählte Daten abzurufen (in diesem Fall den Wert von "test"):
Wenn sich die JSON-Daten in einer Datei befinden:
Wenn Sie alles auf einmal erledigen möchten, gehen Sie
curl
mit einem Authentifizierungstoken in die Befehlszeile:quelle
| prettyjson
Dank der sehr hilfreichen Hinweise von JF Sebastian ist hier ein leicht verbessertes Skript, das ich mir ausgedacht habe:
quelle
dict
Objekte haben keine definierte Reihenfolge. Versuchen Sie esjson.dumps(json.loads('{"b": 1, "a": 2}'), sort_keys=False)
und Sie werden feststellen, dass sie trotzdem getauscht sind. Um dies zu beheben, importierenOrderedDict
undload
übergebenobject_pairs_hook=OrderedDict
.inputFile = sys.stdin
. Auf diese Weise können Sie Inhalte wie folgt an das Skript weiterleiten:curl http://somewhere.com/foo.json | pp_json.py
from collections import OrderedDict
.com! FormatJSON %!python -c "from collections import OrderedDict; import sys; import json; j = json.load(sys.stdin, object_pairs_hook=OrderedDict); json.dump(j, sys.stdout, sort_keys=False, indent=4, separators=(',', ': '))"
Beachten Sie, dass die Trennzeichen auf (',', ':') gesetzt werden müssen, um zu vermeiden, dass nachgestellte Leerzeichen hinzugefügt werden: bugs.python.org/issue16333sort_keys = True
stattdessen verwendet, weil ich dies verwenden möchte, um JSON-Dateien zu vergleichen, und es funktioniert wie ein Zauber.Wenn Sie npm und Node.js verwenden, können Sie
npm install -g json
den Befehl ausführen und dann weiterleitenjson
. Tun Siejson -h
, um alle Optionen zu erhalten. Es kann auch bestimmte Felder herausziehen und die Ausgabe mit kolorieren-i
.quelle
Mit den jq-Tools ist es auf native Weise nicht allzu einfach .
Zum Beispiel:
quelle
jq . file.json
; aber auchcat file.json | jq
(ohne Filter.
) funktioniert auch. (auf Ubuntu / Linux; Ymmv über Plattformen)Verwenden Sie mit Perl das CPAN-Modul
JSON::XS
. Es installiert ein Befehlszeilentooljson_xs
.Bestätigen:
Verschönern Sie die JSON-Datei
src.json
mitpretty.json
:Wenn Sie nicht haben
json_xs
, versuchen Sie esjson_pp
. "pp" steht für "pure perl" - das Tool ist nur in Perl implementiert, ohne an eine externe C-Bibliothek gebunden zu sein (wofür XS steht, Perls "Extension System").quelle
-t null
gab mir null: kein gültiges toformat ... aber es wegzulassen hat hervorragend funktioniert. Vielen Dank.Unter * nix funktioniert das Lesen von stdin und das Schreiben in stdout besser:
Fügen Sie dies in eine Datei (ich habe meine nach der Antwort von AnC " prettyJSON " genannt) in Ihren PATH und
chmod +x
es ein, und Sie können loslegen .quelle
fileinput.input()
liest aus stdin, wenn in einer Befehlszeile keine Dateien angegeben sind. BeispielDer JSON Ruby Gem wird mit einem Shell-Skript gebündelt, um JSON zu verschönern:
Skript herunterladen: gist.github.com/3738968
quelle
json.tool
. Es scheint jedoch auch Einschränkungen hinsichtlich der Verschachtelungstiefe zu geben (nesting of 20 is too deep (JSON::NestingError)
).sudo apt-get install ruby-json-pure
anstelle vongem install
prettify_json.rb
?~/bin
Ordner verschieben (stellen Sie sicher, dass es sich in Ihrem Pfad befindet), umbenennenprettify_json.rb
inppj
und ausführenchmod +x ppj
. Jetzt können Sie so etwas wiecurl www.jsonsring.com/something.json | ppj
UPDATE Ich verwende
jq
jetzt wie in einer anderen Antwort vorgeschlagen. Es ist extrem leistungsfähig beim Filtern von JSON, aber im Grunde genommen auch eine großartige Möglichkeit, JSON zum Anzeigen hübsch zu drucken.jsonpp ist ein sehr schöner Befehlszeilen-JSON-Drucker.
Aus der README:
Wenn Sie unter Mac OS X arbeiten, können Sie
brew install jsonpp
. Wenn nicht, können Sie die Binärdatei einfach an eine beliebige Stelle in Ihrem kopieren$PATH
.quelle
python -mjson.tool
(von anderen Antworten hier) und es dauerte 10-20 Sekunden ...json_pp
- das json gut formatiert, obwohl ich trotz der Ähnlichkeit bei der Benennung glaube, dass dies ein ganz anderes Projekt ist als dasjsonpp
hier erwähnteSo mach ich es:
Es verkürzt den Code und erledigt die Arbeit.
quelle
Ein einfaches Bash-Skript für den hübschen JSON-Druck
json_pretty.sh
Beispiel:
quelle
%*c
Notation so dass ich das geändertprintf
zuc=0; while (c++<offset) printf " "; printf $0;
. Und mein awk hat andere Regex-Flucht und Backslash funktioniert nicht in[]
. Ich habe die regulären Ausdrücke in/^[[{]/
und geändert/[]}]/
.grep
, der versehentlich gelöscht wurde;)Versuchen Sie es
pjson
. Es hat Farben!Installieren Sie es mit
pip
:⚡ pip install pjson
Und dann leiten Sie jeden JSON-Inhalt an weiter
pjson
.quelle
HINWEIS: Dies ist nicht der richtige Weg.
Das gleiche in Perl:
Hinweis 2: Wenn Sie ausführen
Das gut lesbare Wort wird verschlüsselt
Wenn der Rest Ihrer Pipeline ordnungsgemäß mit Unicode umgehen kann und Sie möchten, dass Ihr JSON auch für Menschen geeignet ist , verwenden Sie ihn einfach
ensure_ascii=False
und du wirst bekommen:
quelle
to_json
scheint es keine Optionen zu akzeptieren. Aber das funktioniert:perl -MJSON -nE 'say JSON->new->pretty->encode(from_json $_)' text.json
python -m json.tool
.json.tool
Codebeispiele zeigen . 1. Mit dieser Version können Sie einige Parameter ändern, z. B.indent
2. Zum Zeitpunkt der Veröffentlichung (2008) wurde noch Python 2.4 verwendet , das nicht unterstützt wird-mjson.tool
Ich benutze jshon , um genau das zu tun, was Sie beschreiben. Renn einfach:
Sie können auch Argumente übergeben, um die JSON-Daten zu transformieren.
quelle
Oder mit Ruby:
quelle
to_json
Methoden verwenden.Kernel#jj
druckt nur Arrays und Hashes derselben (oder Zahlen / Strings / Boolesche Werte) hübsch aus.echo { "foo": "lorem", "bar": "ipsum" } | ruby -r json -e 'jj JSON.parse gets'
Schauen Sie sich Jazor an . Es ist ein einfacher Befehlszeilen-JSON-Parser, der in Ruby geschrieben wurde.
quelle
curl
und dies ist der einzige, der dies für mich getan hat.Mit diesem einfachen Befehl können Sie das Ergebnis erzielen:
quelle
JSONLint verfügt über eine Open-Source-Implementierung auf GitHub , die in der Befehlszeile verwendet oder in ein Node.js-Projekt aufgenommen werden kann.
und dann
oder
quelle
Leiten Sie den Ausgang einfach an
jq .
.Beispiel:
quelle
cat <file_name.txt> | jq . > <output_name.txt>
brew install jq
Wenn Sie auf Mac OS sind.jq .
für das hübsche Drucken einen möglichen Nachteil: Alle vorhandenen Versionen von jq bestehen darauf, JSON-Zahlen als IEEE-Zahlen zu behandeln, sodass die Genauigkeit leicht verloren geht, z. B. bei sehr großen Ganzzahlen.cat file |
ist immer eine Verschwendung eines Prozesses; einfach machenjq . <file_name.txt >output_name.txt
(mit Literal<
und>
Zeichen).Pygementize
Ich kombiniere Pythons json.tool mit pygementize:
Es gibt einige Alternativen zu pygementize, die in meiner Antwort aufgeführt sind .
Hier ist eine Live-Demo:
quelle
pygmentize -l json
, um eine Färbung zu erhalten.python-pygments
, das heißtapt-get install python-pygments
Wenn Sie mit Perl JSON :: PP von CPAN installieren, erhalten Sie den Befehl json_pp . Wenn Sie das Beispiel von B Bycroft stehlen, erhalten Sie:
Erwähnenswert ist, dass
json_pp
Ubuntu 12.04 (mindestens) und Debian in vorinstalliert sind/usr/bin/json_pp
quelle
Ich empfehle die Verwendung des Befehlszeilenprogramms json_xs, das im Perlmodul JSON :: XS enthalten ist. JSON :: XS ist ein Perl-Modul zum Serialisieren / Deserialisieren von JSON. Auf einem Debian- oder Ubuntu-Computer können Sie es folgendermaßen installieren:
Es ist offensichtlich auch auf CPAN verfügbar .
Um JSON zu formatieren, das von einer URL erhalten wurde, können Sie curl oder wget wie folgt verwenden:
oder dieses:
und um JSON zu formatieren, das in einer Datei enthalten ist, können Sie Folgendes tun:
Um als YAML neu zu formatieren , was einige Leute für besser lesbar halten als JSON:
quelle
Sie können einfach Standardwerkzeuge wie jq oder json_pp verwenden.
echo '{ "foo": "lorem", "bar": "ipsum" }' | json_pp
oder
echo '{ "foo": "lorem", "bar": "ipsum" }' | jq
beide verschönern die Ausgabe wie folgt (jq noch bunter):
Der große Vorteil von jq ist, dass es VIEL mehr kann, wenn Sie den json analysieren und verarbeiten möchten.
quelle
jj ist superschnell, kann gigantische JSON-Dokumente wirtschaftlich verarbeiten, spielt nicht mit gültigen JSON-Nummern und ist einfach zu verwenden, z
oder
Es ist (2018) noch ziemlich neu, daher wird ungültiges JSON möglicherweise nicht wie erwartet behandelt, aber es ist einfach auf wichtigen Plattformen zu installieren.
quelle
brew install jq
command + | jq
curl localhost:5000/blocks | jq
)quelle
bat
ist eincat
Klon mit Syntaxhervorhebung:Beispiel:
-p
wird ohne Überschriften ausgegeben und-l
gibt die Sprache explizit an.Es hat Farben und Formatierungen für JSON und weist nicht die in diesem Kommentar genannten Probleme auf: Wie kann ich JSON in einem Shell-Skript hübsch drucken?
quelle
Installieren Sie yajl-tools mit dem folgenden Befehl:
sudo apt-get install yajl-tools
dann,
echo '{"foo": "lorem", "bar": "ipsum"}' | json_reformat
quelle