Wie kann ich pretty-print JSON in ein shell-Skript?
Gibt es eine (Unix -) shell-Skript, um JSON-format in lesbarer form?
Im Grunde, ich will es transformieren Sie die folgenden:
{ "foo": "lorem", "bar": "ipsum" }
... in etwas so:
{
"foo": "lorem",
"bar": "ipsum"
}
- stackoverflow.com/a/12892039/998291
- Ich rollte meine eigene kurze Zeit zurück: github.com/exhuma/braindump/tree/master/jsonformat Der code ist sehr einfach, mit python eigene
json
Bibliothek, aber ich habe pygments als auch um syntax-highlighting. - Stolperte dieser dann aber gefunden Json Pretty und ich mag es sehr. Typekit verwendet Sie in Ihren API-Beispiele, so gibt es einige klout dahinter ^^
- Hier ein blog-Beitrag fasst einige der besten Methoden erwähnt in diesem thread. Für diejenigen, die lieber tldr: link
- Wenn Sie nichts dagegen haben, kopieren einfügen, es gibt auch einige einfache online-tools wie jsonprettyprint.net wo kann man schnell ziemlich drucken Sie Ihre raw-JSON.
- Nur ein wenig kühl Leckerbissen, die vielleicht super offensichtlich, aber für jeden, der versucht, ziemlich eine Datei drucken, die mit JSON-das funktioniert
echo "$(cat nameOfYourFile.js)" | python -m json.tool
- Seien Sie gewarnt: python -m json.tool nicht immer Valide JSON. (Tipp: 1e1000)
- Ist das json nur eine Ebene tief? Diese schneidet regex-basierte Lösungen im Falle einer negativen Antwort.
- (python) kwargs
indent
dies tun wird. getan. alsoprint(json.dumps({'foo':'bar', 'bam':'baz'}, indent=4))
- Jemand ein bequemer Weg, um den pretty-print für ein JSON-Datei in-place?
- hier ist die interaktive JSON viewer github.com/antonmedv/fx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit Python 2.6+ können Sie nur:
oder, wenn das JSON in eine Datei, die Sie tun können:
wenn das JSON ist von einer internet-Quelle, wie eine API, die Sie verwenden können,
Für Komfort in allen diesen Fällen können Sie einen alias:
Für noch mehr Komfort mit ein bisschen mehr Tippen, um es bereit:
für alle oben genannten Fälle. Sie können diese in
.bashrc
verfügbar und wird jedes mal in Schale. Es aufrufen, wieprettyjson_s '{"foo": "lorem", "bar": "ipsum"}'
.pygmentize -l javascript
zu bekommen, syntax farbige Ausgabe in der Befehlszeile. Edit: Wenn Sie pygments installiert ist.json
Art auch.alias pretty='python -mjson.tool | pygmentize -l json
so, dass ich nur ausführen:command params | pretty
. Hoffe, das hilft. PS: Sollte jemand schafft es diese verlängert werden, um a) entfernen Sie die curl-Ausgabe sehe ich jedes mal, und/oder b) NICHT Sortieren Sie die json-Schlüssel; bitte lassen Sie mich wissen, ich werde sehr dankbar.$ cat file.json | python -m json.tool
--sort-keys
nach Schlüssel Sortieren alphabetisch. Antwort auf Kommentar von @ChrisNash.pbpaste | python -m json.tool | pbcopy
.cat
es mitpython -m json.tool /path.json
?curl -s http://my_url/ | python -m json.tool
Sollte nur drucken Sie das JSON-Format.No module named json.module
Können Sie verwenden:
jq
Es ist sehr einfach zu verwenden und es funktioniert Super! Es kann mit sehr großen JSON-Strukturen, einschließlich streams. Sie finden
Ihre tutorials hier.
Hier ist ein Beispiel:
Oder in anderen Worten:
--sort-keys
option, die hilfreich in einigen Fällen.curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.'
echo '{ "foo": "lorem", "bar": "ipsum" }' | jq .
für das Beispiel?echo '{ "foo": "lorem", "bar": "ipsum" }' | jq . > myfile
.<<<
Betreiber – genau das, was ich suchte.jq
's features, einschließlich eines Abschnitts über" pretty printing: shapeshed.com/jq-json/#how-to-pretty-print-json. Eine Art zu schreiben, Ihre hässlich-Datei auf einen ziemlich ein:cat ugly.json | jq '.' | cat > pretty.json
cat | jq .
und einfügen zu arbeiten. Nicht mehr, scheint es... jq nur die Ausgänge für einige Grund. Jetzt habe ich mit meiner paste-from-clipboard-alias:clipread | jq
. Der alias istalias clipread='xclip -out -selection clipboard'
(fügen Sie diese zu Ihrem~/.bashrc
oder der zshrc oder was auch immer-rc, und wählen Sie einen alias-Namen, die Sie mögen).jq . <<< cat filename.json
jq
ist die beste, weil es druckt in den Farben!cat - | jq .
mit eingefügten text. Viel Glück an alle.jq -C
zu gehören Farben. Wenn Sie umleiten der Ausgabe zuless
, dannexport LESS="-R"
und verwenden Sie dannjq -C ... | less
. Ohne-C
,jq
unterdrückt Farben, wenn die Ausgabe nicht direkt an einem terminal, wie in| command
oder> file
."foo": 16962331779841739123
dannjq '.'
im hintergrund Runden die Anzahl der zu"foo": 16962331779841739000
. Wenn ich bin nur auf der Suche nach einem pretty-printer, dann würd ich wählte eines, das nicht verlustbehaftet.Ich den "Raum" argument
JSON.stringify
zu pretty-print JSON in JavaScript.Beispiele:
Aus der Unix-Befehlszeile mit Node.js die Angabe JSON auf der Kommandozeile:
Gibt:
Aus der Unix-Befehlszeile mit Node.js Angabe einen Dateinamen enthält, JSON, und mit einem Einzug von vier Räumen:
Verwendung einer pipe:
node -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, '\t'));"
auf der Unix-Kommando-Zeile (mit nodejs)node -p "JSON.stringify(JSON.parse(process.argv[1]), null, '\t');"
auch gibt das Ergebnis auf STDOUT aus.jid
gutes tool zum Debuggen json github.com/simeji/jid/dev/stdin
!Ich habe ein tool geschrieben, das eine der besten "smart whitespace" Formatierungshilfen zur Verfügung. Es produziert mehr lesbar und weniger verbose output als die meisten anderen Optionen hier.
Unterstrich-cli
Dies ist, was "smart whitespace" sieht wie folgt aus:
Ich ein bisschen voreingenommen, aber es ist ein geiles tool zum drucken und Bearbeiten von JSON-Daten aus der command-line. Es ist super-freundlich zu bedienen und verfügt über umfangreiche command-line-Hilfe/- Dokumentation. Es ist ein Schweizer Armee-Messer, die ich benutze für 1001 verschiedene kleine Aufgaben, die wäre überraschend, ärgerlich, dass ich keine anderen Weg.
Neuesten use-case: Chrome Dev-Konsole Registerkarte "Netzwerk", und exportieren Sie alle als HAR-Datei, "Katze site.har | Unterstrich wählen '.url' --outfmt text | grep mydomain"; jetzt habe ich eine chronologisch geordnete Liste aller URL holt sich während dem laden meiner Unternehmens-Website.
Ziemlich Druck ist einfach:
Gleiche:
Gleiche Sache, expliziter:
Dieses tool ist meine aktuelle Leidenschaft Projekt, so dass, wenn Sie irgendwelche feature-Wünsche, gibt es eine gute chance, ich werde Sie darauf ansprechen.
[32m
,[33m
,[39m
zusammen mit einigen nicht-druckbaren vor jedem von Ihnen, die macht JSON nicht gültig. Allerdings, unterstreichen drucken allein bedeutet nichts hinzufügen zu einer Datei und macht die Formatierung job perfekt.jq
aber das war Super für meine "JSON", die nicht in doppelte Anführungszeichen gesetzt-Tasten.npm
(verwenden Sie creationix/nvm 🙂 ) zu installieren, denn es sollte global sein: npm install-g Unterstrich-cli ... dann in.bash_profile
: alias json='Unterstrich drucken --color' ... und wie: Katze einige.json | json-Unterstrich-CLI ist wirklich toll und einfach zu integrieren in Ihre Entwicklungsumgebung.Ich in der Regel nur tun:
Und abrufen von Daten auswählen (in diesem Fall "test"'s Wert):
Wenn die JSON-Daten in eine Datei:
Wenn Sie wollen, tun es alle in einem Rutsch mit
curl
auf der Kommandozeile unter Verwendung eines Authentifizierungs-token:| prettyjson
Dank J. F. Sebastian ist sehr hilfreich, Zeiger, hier ist eine etwas erweiterte script, das ich mir ausgedacht habe:
dict
- Objekte haben keine definierte Reihenfolge. Versuchenjson.dumps(json.loads('{"b": 1, "a": 2}'), sort_keys=False)
und finden Sie, dass Sie sowieso getauscht. Um es zu beheben, importierenOrderedDict
undload
vorbeiobject_pairs_hook=OrderedDict
.inputFile = sys.stdin
. Diese können Sie Rohr-Zeug, um das Skript so auf: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 das Trennzeichen festgelegt werden muss, wie (',', ': ') zu vermeiden, Leerzeichen Hinzugefügt wird: bugs.python.org/issue16333sort_keys = True
statt, weil ich möchte, dass Sie diese zu vergleichen, json-Dateien und es funktioniert wie ein Charme.Wenn Sie npm und Node.js Sie tun kann
npm install -g json
und leiten den Befehl überjson
. Tunjson -h
um alle die Optionen. Es können auch pull-out-spezifischen Felder und farbige Ausgabe mit-i
.Es nicht zu einfach ist mit einer einheimischen Art mit die jq-tools.
Beispiel:
jq . file.json
; aber auchcat file.json | jq
(ohne filter.
) funktioniert auch. (auf ubuntu/linux; ymmv, Plattformen)Mit Perl benutzen der CPAN-Modul
JSON::XS
. Es installiert ein Kommandozeilen-tooljson_xs
.Überprüfen:
Prettify die JSON-Datei
src.json
zupretty.json
:Wenn Sie nicht über
json_xs
versuchenjson_pp
. "pp" steht für "pure perl" – das tool ist in Perl implementiert, nur ohne eine Bindung an einen externen C-Bibliothek (was die XS steht für, Perl ' s "Extension System").-t null
gab mir den null: keine gültige toformat... aber lassen Sie es ausgeschaltet, funktionierte prächtig. Danke.json_xs
undjson_pp
weder bewahren Schlüssel, um noch die Sortierung der Schlüssel. Pretty-printing mit der gleichen JSON-Datei doppelt ist wahrscheinlich unterschiedliche Ergebnisse erzeugen. (Getestet mit perl-5.26.1-6 und libjson-xs-perl-3.040-1 auf Ubuntu 18.04.)Auf *nix, Lesen von stdin und schreiben nach stdout funktioniert besser:
Setzen Sie diese in eine Datei (ich nannte meinen "prettyJSON" nach AnC's Antwort), die in Ihrem PFAD und
chmod +x
es, und du bist gut zu gehen.fileinput.input()
liest von stdin, wenn keine Dateien zu einem Kommando-Zeile. ExampleJSON Ruby-Gem ist gebündelt mit einem shell-Skript zu prettify JSON:
Script herunterladen: gist.github.com/3738968
json.tool
. Jedoch scheint es auch zu haben Verschachtelungstiefe Einschränkungen (nesting of 20 is too deep (JSON::NestingError)
).sudo apt-get install ruby-json-pure
stattgem install
prettify_json.rb
?~/bin
Ordner (stellen Sie sicher, dass es in Ihrem PFAD) umbenennenprettify_json.rb
zuppj
und führenchmod +x ppj
. Jetzt können Sie etwas tun, wiecurl www.jsonsring.com/something.json | ppj
prettify_json.rb
Schiffe mit Ruby 1.9 und höherUPDATE ich bin mit
jq
jetzt wie vorgeschlagen in einer anderen Antwort. Es ist extrem leistungsfähig bei der Filterung JSON, aber, an seinem grundlegendsten, auch ein fantastischer Weg, um pretty print JSON für die Anzeige.jsonpp ist ein sehr schönes Befehlszeile JSON ziemlich Drucker.
Aus der README:
Wenn Sie auf Mac OS X, können Sie
brew install jsonpp
. Wenn nicht, können Sie einfach kopieren Sie die Binärdatei, die irgendwo in Ihrem$PATH
.python -mjson.tool
(aus anderen Antwort hier) und es dauerte 10-20sek...json_pp
- welches format json schön, obwohl trotz der ähnlichkeit in der Namensgebung, ich glaube, das ist ein ganz anderes Projekt aus derjsonpp
hier erwähntVersuchen
pjson
. Es hat Farben!Installieren Sie es mit
pip
:⚡ pip install pjson
Und dann jedes beliebige JSON-Inhalt
pjson
.Das ist, wie ich es mache:
Es verkürzt den code, und erhält die Arbeit erledigt.
HINWEIS: Es ist nicht die Weg, es zu tun.
Das gleiche in Perl:
Hinweis 2:
Wenn Sie
den schön lesbaren Wort wird \u codiert
Wenn der Rest deiner pipeline wird ordnungsgemäß zu behandeln unicode und Sie möchten, dass Ihre JSON-auch menschlich-freundlich, einfach verwenden
ensure_ascii=False
und erhalten Sie:
to_json
scheint nicht zu akzeptieren, Optionen. Aber dies funktioniert:perl -MJSON -nE 'say JSON->new->pretty->encode(from_json $_)' text.json
python -m json.tool
.json.tool
code-Beispiele. 1. mit dieser version können Sie einige Parameter zu ändern, z.B.indent
2. Zur Zeit der Veröffentlichung (2008) Python 2.4 noch nicht unterstützt-mjson.tool
Benutze ich jshon zu tun genau das, was du beschreibst. Führen Sie einfach:
Kann man auch Argumente übergeben, die für die Transformation der JSON-Daten.
Oder mit Ruby:
jj my_object
to_json
Methoden;Kernel#jj
nur pretty-prints arrays und hashes mit dem gleichen (oder zahlen/strings/booleans).ARGF.read
stattgets
.echo { "foo": "lorem", "bar": "ipsum" } | ruby -r json -e 'jj JSON.parse gets'
Check-out Jazor. Es ist ein einfaches Kommandozeilen-JSON-parser, geschrieben in Ruby.
curl
- und das ist das einzige, das hat es für mich.einem einfachen bash-script für ziemlich json-Druck
json_pretty.sh
Beispiel:
%*c
notation, also änderte ich dasprintf
zuc=0; while (c++<offset) printf " "; printf $0;
. Und mein awk hat verschiedene regex-Flucht und backslash funktioniert nicht in[]
. Ich habe die regexes zu/^[[{]/
und/[]}]/
.grep
wurde gelöscht durch Fehler 😉{ "\"" : "quote" }
in{ "\" " : " }
(auf mehreren Zeilen).JSONLint hat eine open-source-Implementierung auf GitHub, die verwendet werden können auf der Kommandozeile oder in einer Node.js Projekt.
dann
oder
Einfach, leiten Sie die Ausgabe in
jq .
.Beispiel:
cat <file_name.txt> | jq . > <output_name.txt>
brew install jq
wenn Ihr auf mac os.jq .
für pretty-printing hat eine potential Nachteil: alle vorhandenen Versionen von jq bestehen auf die Behandlung von JSON-zahlen als IEEE-zahlen, so ist die Präzision leicht verloren gehen, z.B. für sehr große zahlen.jq . <file_name.txt >output_name.txt
(mit wörtlichen<
und>
Zeichen).Pygmentize
Kombiniere ich Python-json.tool mit pygmentize:
Gibt es einige alternativen zu pygmentize, die aufgeführt sind in meine diese Antwort.
Hier ist eine live-demo:
pygmentize -l json
zu bekommen colourfication.python-pygments
, d.h.apt-get install python-pygments
Können Sie mit diesem einfachen Befehl, um das Ergebnis erreichen:
Mit Perl, wenn Sie die Installation JSON::PP von CPAN erhalten Sie die json_pp Befehl. Der Diebstahl Beispiel von B Bycroft erhalten Sie:
Es ist erwähnenswert, dass
json_pp
kommt vorinstalliert mit Ubuntu 12.04 (mindestens) und Debian in/usr/bin/json_pp
Empfehle ich die json_xs Befehlszeilen-Dienstprogramm, das enthalten ist in das JSON::XS-perl-Modul. JSON::XS ist ein Perl-Modul zum serialisieren/Deserialisieren von JSON, die auf einem Debian-oder Ubuntu-Maschine installieren Sie es wie folgt:
Ist es natürlich auch auf CPAN.
Es zu verwenden, um JSON-format, die aus einer URL, die Sie verwenden können, curl oder wget wie diese:
oder so:
und JSON-format in einer Datei enthalten, die Sie dies tun können:
Formatieren, wie YAML, das einige Leute der Ansicht zu sein, mehr menschlich-lesbar als JSON:
brew install jq
command + | jq
curl localhost:5000/blocks | jq
)jj ist super-schnell, kann behandeln riesige JSON-Dokumente wirtschaftlich, nicht Durcheinander mit Gültiger JSON zahlen, und ist einfach zu verwenden, z.B.
oder
Ist es (2018) noch Recht neu, also vielleicht wird es nicht handhaben ungültige JSON-die Art und Weise, die Sie erwarten, aber es ist einfach zu installieren auf den wichtigsten Plattformen.
bat
ist eincat
- Klon mit syntax-highlighting:Beispiel:
-p
- Ausgabe ohne Header, und-l
wird explizit die Sprache.Es hat die Färbung und die Formatierung für JSON und nicht nicht haben die Probleme hingewiesen, die in diesem Kommentar: Wie kann ich pretty-print JSON in ein shell-Skript?
Installieren yajl-tools mit dem Befehl unten:
sudo apt-get install yajl-tools
dann,
echo '{"foo": "lorem", "bar": "ipsum"}' | json_reformat
yajl
ist sehr schön, in meiner Erfahrung. Ich benutze seinejson_reformat
Befehl pretty-print.json
Dateien invim
indem Sie die folgende Zeile in meine.vimrc
:Verwenden Rubin in einer Zeile:
Und Sie können einen alias für diesen:
Dann können Sie es verwenden, mehr bequem
Und wenn Sie möchten, die Anzeige JSON mit Farbe können Sie Ihre installieren
awesome_print
,dann
Probieren Sie es aus!
PHP-version, wenn du PHP >= 5.4.
echo '{"a":1,"b":2}' | php -r 'echo json_encode(json_decode(fgets(STDIN)), JSON_PRETTY_PRINT)."\n";'
printf '{\n"a":1,\n"b":2\n}' | php -r 'echo json_encode(json_decode(file_get_contents("php://stdin")), JSON_PRETTY_PRINT) . PHP_EOL;'
Ich bin mit httpie
Und Sie können es verwenden, wie dies
J. F. Sebastian Lösungen hat bei mir nicht funktioniert in Ubuntu 8.04.
Hier ist eine modifizierte Perl-version, die funktioniert mit dem älteren 1.X-JSON-Bibliothek:
Hier ist ein Ruby-Lösung, die besser ist als Json ist prettify-Befehl. Die gem
colorful_json
ist ziemlich gut.Werkzeug
ydump
ist ein JSON pretty-printer:Oder Sie können über die Pipeline in die JSON:
Dies ist wahrscheinlich die kürzeste Lösung, abgesehen von der Verwendung der
jq
tool.Dieses Werkzeug ist Teil der
yojson
Bibliothek für OCaml und dokumentiert ist hier.Auf Debian und Derivate, das Paket
libyojson-ocaml-dev
enthält dieses tool. Alternativyojson
installiert werden kann, über OPAM.Einen one-line-Lösung mit Node.js Aussehen:
Beispiel:
Es ist TidyJSON.
C#, also vielleicht können Sie es kompilieren mit Mono und auf *nix. Keine Garantien, aber, tut mir Leid.
Hier ist, wie es zu tun mit Groovy Skript.
Erstellen Sie ein Groovy-Skript, sagen wir mal "pretty-print" -
Script ausführbar machen:
Nun von der Kommandozeile aus,
jq
etwa 50-mal schneller.Für Node.js Sie können auch den "util" - Modul. Es nutzt die Syntaxhervorhebung, intelligentes Einrücken, entfernt Zitate aus keys und macht einfach die Ausgabe so schön wie es nur geht.
Ich bin der Autor von json-liner. Es ist eine Befehl Linie Werkzeug, um JSON in einen grep-freundlichen format. Probieren Sie es aus.
Wenn Sie Node.js installiert haben, können Sie eins erstellen auf Ihrem eigenen mit einer Zeile code. Erstellen Sie eine Datei Recht:
Fügen Sie die execute-Berechtigung:
Oder wenn Ihr JSON in eine Datei:
Mit JavaScript/Node.js: werfen Sie einen Blick auf die vkBeautify.js plugin, bietet der pretty-printing für beide JSON-und XML-text.
Es ist geschrieben in reinem JavaScript, weniger als 1.5 KB (minified) und sehr schnell.
Diese Methode auch "Erkennt HTTP-response/Header, druckt Sie unberührt, und springt
der Körper (für die Verwendung mit "curl -i")".
https://github.com/aidanmelen/json_pretty_print
Hier ist eine starke one-liner:
Mein JSON-Dateien wurden nicht analysiert, indem eine der folgenden Methoden.
Mein problem war ähnlich wie die post Ist die Google-Daten-source-JSON-nicht gültig?.
Die Antwort auf diesen post hat mir geholfen, eine Lösung zu finden.
Ist es als ungültige JSON-ohne die string-Schlüssel.
werden müssen:
Dieser link gibt einen guten umfassenden Vergleich der verschiedenen JSON-Parser: http://deron.meranda.us/python/comparing_json_modules/basic
Das führte mich zu http://deron.meranda.us/python/demjson/. Ich denke, das ein parser ist viel mehr fehlertolerant als viele andere.
Auch sicher sein, heraus zu überprüfen JSONFUI: EINE Befehlszeile JSON viewer unterstützt folding
Können Sie Xidel.
Xidel pretty-prints standardmäßig:
oder:
Wenn Sie nichts dagegen haben, verwenden Sie ein Drittanbieter-tool, können Sie einfach curl zu jsonprettyprint.org. Dies ist für den Fall, wo Sie nicht installieren können Pakete auf der Maschine.
echo '{ "foo": "lorem", "bar": "ipsum" }' | curl -XPOST https://jsonprettyprint.org/api -d @-
Können Sie auch online-tools statt, wenn das ist eine option für Sie.
Finde ich http://jsonprettyprint.net die einfachste und einfachste.
Weiß ich, dass der original-post gebeten, für ein shell-Skript, aber es gibt so viele nützliche und irrelevante Antworten, die wahrscheinlich nicht helfen, den ursprünglichen Autor.
Ergänzend Irrelevanz 🙂
BTW, ich könnte keine bekommen Kommandozeilen-tools zu arbeiten.
Wenn jemand will, einfach JSON-JavaScript-code, die Sie tun könnten:
http://www.geospaces.org/geoweb/Wiki.jsp?page=JSON%20Utilities%20Demos
Hier ist der JavaScript-code, dass nicht nur die pretties JSON, aber Aufträge, die Ihnen durch Ihre Attribut oder Attribut und level.
Wenn der Eingang ist
es entweder druckt (Gruppen alle Objekte zusammen):
ODER (nur Bestellungen per key):