Ich habe eine JSON-Datei, die ein Chaos ist, das ich hübsch drucken möchte. Was ist der einfachste Weg, dies in Python zu tun? Ich weiß, dass PrettyPrint ein "Objekt" nimmt, von dem ich denke, dass es eine Datei sein kann, aber ich weiß nicht, wie ich eine Datei übergeben soll - nur die Verwendung des Dateinamens funktioniert nicht.
python
json
formatting
pretty-print
Colleen
quelle
quelle
json.loads()
dem resultierenden Wörterbuch zu analysieren und hübsch auszudrucken. Oder springen Sie einfach zum Abschnitt Pretty Printing in der Python- Dokumentation fürjson
.<your_file.js python -mjson.tool
wie in @ eds Link?Antworten:
Das
json
Modul implementiert bereits einige grundlegende hübsche Drucke mit demindent
Parameter:Verwenden Sie zum Parsen einer Datei Folgendes
json.load()
:quelle
print json.dumps(your_json_string, indent=4)
print(json.dumps(json.loads(your_json_string), indent=2))
ansonsten zeigte es mir nur einen entkommenen StringSie können dies in der Befehlszeile tun:
(Wie bereits in den Kommentaren zur Frage erwähnt, danke an @Kai Petzke für den Python3-Vorschlag).
Eigentlich ist Python nicht mein Lieblingswerkzeug, wenn es um die Verarbeitung von JSON in der Befehlszeile geht. Für einfaches hübsches Drucken ist es in Ordnung, aber wenn Sie das JSON manipulieren möchten, kann es zu kompliziert werden. Sie müssten bald eine separate Skriptdatei schreiben. Sie könnten Karten erhalten, deren Schlüssel u "some-key" (Python-Unicode) sind, was die Auswahl von Feldern erschwert und nicht wirklich in Richtung hübsch geht -Drucken.
Sie können auch jq verwenden :
und Sie erhalten Farben als Bonus (und viel einfachere Erweiterbarkeit).
Nachtrag: In den Kommentaren gibt es einige Verwirrung über die Verwendung von jq zum Verarbeiten großer JSON-Dateien einerseits und über ein sehr großes jq-Programm andererseits. Für das hübsche Drucken einer Datei, die aus einer einzelnen großen JSON-Entität besteht, ist die praktische Einschränkung RAM. Für das hübsche Drucken einer 2-GB-Datei, die aus einem einzelnen Array realer Daten besteht, betrug die für das hübsche Drucken erforderliche "maximale residente Satzgröße" 5 GB (unabhängig davon, ob jq 1.5 oder 1.6 verwendet wird). Beachten Sie auch, dass jq innerhalb von Python nach verwendet werden kann
pip install jq
.quelle
jq '' < some.json
python3 -m json.tool <IN >OUT
, da hierdurch die ursprüngliche Reihenfolge der Felder in JSON-Dikten beibehalten wird. Der Python-Interpreter Version 2 sortiert die Felder in alphabetisch aufsteigender Reihenfolge, was häufig nicht Ihren Wünschen entspricht.Sie können den integrierten Moduldruck (https://docs.python.org/3.6/library/pprint.html) verwenden .
So können Sie die Datei mit JSON-Daten lesen und ausdrucken.
quelle
Pygementize + Python json.tool = Hübscher Druck mit Syntaxhervorhebung
Pygementize ist ein Killer-Tool. Sieh dir das an.
Ich kombiniere python json.tool mit pygementize
Unter dem obigen Link finden Sie Anweisungen zur Installation von pygementize.
Eine Demo davon finden Sie im Bild unten:
quelle
-g
funktioniert das nicht wirklich;) Da die Eingabe von stdin stammt, kann pygementize keine guten Vermutungen anstellen. Sie müssen Lexer explizit angeben:echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json
Verwenden Sie diese Funktion und schwitzen Sie nicht, wenn Sie sich daran erinnern müssen, ob es sich bei Ihrem JSON um einen
str
oder einen anderen handelt.dict
Schauen Sie sich einfach den hübschen Druck an:quelle
Ich habe einmal eine
prettyjson()
Funktion geschrieben, um eine gut aussehende Ausgabe zu erzeugen. Sie können die Implementierung von diesem Repo abrufen .Das Hauptmerkmal dieser Funktion ist, dass versucht wird, Diktat- und Listenelemente in einer Zeile zu halten, bis eine bestimmte
maxlinelength
erreicht ist. Dies erzeugt weniger JSON-Zeilen, die Ausgabe sieht kompakter und leichter zu lesen aus.Sie können diese Art von Ausgabe zum Beispiel erzeugen:
UPD 19. Dezember: Ich habe den Code in ein separates Repo gestellt , einige Fehler korrigiert und einige weitere Änderungen vorgenommen.
quelle
Um über die Befehlszeile hübsch drucken und die Einrückung usw. steuern zu können, können Sie einen ähnlichen Alias einrichten:
Verwenden Sie den Alias dann auf eine der folgenden Arten:
quelle
Verwenden Sie pprint: https://docs.python.org/3.6/library/pprint.html
print()
verglichen mitpprint.pprint()
quelle
pprint
erstellt kein gültiges JSON-Dokument.Hier ist ein einfaches Beispiel für das hübsche Drucken von JSON auf die Konsole in Python, ohne dass sich JSON als lokale Datei auf Ihrem Computer befinden muss:
quelle
Es funktioniert, um es anzuzeigen oder in einer Datei zu speichern.
quelle
Ich denke, es ist besser, den JSON vorher zu analysieren, um Fehler zu vermeiden:
quelle
Sie könnten pprintjson versuchen .
Installation
Verwendungszweck
Drucken Sie JSON aus einer Datei mithilfe der pprintjson-CLI.
Pretty Print JSON von einem Standard mit der pprintjson CLI.
Drucken Sie JSON mithilfe der pprintjson-CLI aus einem String.
Pretty print JSON aus einem String mit einem Einzug von 1.
Drucken Sie JSON hübsch aus einer Zeichenfolge und speichern Sie die Ausgabe in einer Datei output.json.
Ausgabe
quelle
Es ist alles andere als perfekt, aber es macht den Job.
Sie können es verbessern, Einrückungen hinzufügen und so weiter, aber wenn Sie nur einen saubereren JSON lesen möchten, ist dies der richtige Weg.
quelle