Ich habe eine JSON-Datei, die ein Chaos ist, dass ich prettyprint-- 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 weitergeben soll - nur die Verwendung des Dateinamens funktioniert nicht.Wie druckt man eine JSON-Datei?
Antwort
Das json
Modul bereits implementiert einige grundlegende ziemlich Drucken mit dem indent
Parameter:
>>> import json
>>>
>>> your_json = '["foo", {"bar":["baz", null, 1.0, 2]}]'
>>> parsed = json.loads(your_json)
>>> print json.dumps(parsed, indent=4, sort_keys=True)
[
"foo",
{
"bar": [
"baz",
null,
1.0,
2
]
}
]
Um eine Datei zu analysieren, verwenden json.load
:
with open('filename.txt', 'r') as handle:
parsed = json.load(handle)
Sie können diese auf der Kommandozeile tun:
cat some.json | python -m json.tool
(wie bereits m in den Kommentaren zu der Frage).
Eigentlich Python ist nicht mein Lieblingswerkzeug so weit wie json Verarbeitung auf der Kommandozeile betroffen ist. Für einfaches hübsches Drucken ist ok, aber wenn Sie den JSON manipulieren möchten, kann es übermäßig kompliziert werden. Sie müssten bald eine separate Skript-Datei schreiben, Sie könnten mit Karten enden, deren Schlüssel "some-key" (Python-Unicode) sind, was die Auswahl von Feldern erschwert und nicht wirklich in die Richtung von hübsch geht -Drucken.
Ich verwende jq. Das Obige kann gemacht werden:
cat some.json | jq ''
und Sie Farben als Bonus (und viel einfacher Erweiterbarkeit) erhalten.
JQ ist großartig, aber es gibt eine maximale Grenze, so dass es für große Dateien nutzlos ist. (Dh die Luft sprengt eine 1.15MB Datei-Handling) https://github.com/stedolan/jq/issues/1041 –
ja, Mann, auf jeden Fall, wenn Sie jq Filter mit mehr als 10K Zeilen Code schreiben, ich glaube, Sie‘ Versuchen Sie etwas wie mit einem Fahrrad zum Mars zu gehen. –
lol: D @ gismo-ranas Die Version json.tool, die in eine Datei piped ist, funktioniert wirklich sehr gut auf großen Dateien; und ist blöd schnell. Ich mag JQ, aber Formatierung alles jenseits einer kleinen Nutzlast (die Sie in den meisten Texteditoren tun könnten) ist außerhalb seiner Reichweite :) Zufälliger Zusatz: http://www.json-generator.com/ ist ein nettes Werkzeug, um Testdaten zu machen –
Pygmentize + Python json.tool = Ziemlich Drucken mit Syntax
Hervorhebungen Pygmentize ist ein Killer-Tool. See this.
Ich verbinde Python json.tool mit pygmentize
echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json
über den Link Siehe pygmentize Installationsanleitung.
Eine Demo ist dies im Bild unten:
In Ihrem Beispiel funktioniert '-g' nicht wirklich;) Da die Eingabe von stdin kommt, kann pygmentize nicht gut raten. Sie müssen lexer explizit angeben: 'echo '{" foo ":" bar "}' | python -m json.tool | pygmentise -l json' –
@DenisTheMenace Es hat im Jahr 2015 funktioniert, als ich dieses Beispielbild erstellt habe. Es scheint jetzt auch nicht auf meinem System zu funktionieren. –
Mit dieser Funktion und Schweiß nicht mit sich erinnern, wenn Ihr JSON ein str
oder dict
wieder - an der hübschen Druck anschauen : Lage sein
import json
def pp_json(json_thing, sort=True, indents=4):
if type(json_thing) is str:
print(json.dumps(json.loads(json_thing), sort_keys=sort, indent=indents))
else:
print(json.dumps(json_thing, sort_keys=sort, indent=indents))
return None
pp_json(your_json_string_or_dict)
um ziemlich von der Kommandozeile zu drucken und über die Vertiefung Kontrolle zu haben usw. der Lage sein, können Sie einen Aliasnamen ähnlich wie diese ein:
alias jsonpp="python -c 'import sys, json; print json.dumps(json.load(sys.stdin), sort_keys=True, indent=2)'"
Und dann verwenden Sie den Alias in eine der folgenden Arten:
cat myfile.json | jsonpp
jsonpp < myfile.json
Sie pprint nutzen könnten.
So lesen Sie die Datei mit JSON-Daten und drucken sie aus.
import json
import pprint
with open('filename.txt', 'r') as f:
json_data = json.load(f.read())
pprint.pprint(json_data)
Hier ist ein einfaches Beispiel für ziemlich Druck JSON an die Konsole in einer schönen Weise in Python, ohne dass die JSON zu erfordern als eine lokale Datei auf Ihrem Computer zu sein:
Ich erhalte die folgende Fehlermeldung in Python 3: "TypeError: das JSON-Objekt muss str sein, nicht 'Bytes'" – MrT
Versuchen Sie, die JSON parsen Verwenden Sie 'json.loads()' und drucken Sie das resultierende Wörterbuch. Oder gehen Sie einfach zum Abschnitt ** Pretty printing ** von Python [Dokumentation für 'json'] (http://docs.python.org/library/json.html). – Blender
http://stackoverflow.com/questions/352098/how-to-pretty-print-json-script –
@Blender wenn Sie eine Antwort hinterlassen werde ich Ihnen ... Kredit geben könnte dies als Duplikat geschlossen werden, weil Die Lösung ist die gleiche, aber die Frage ist anders, also vielleicht nicht. – Colleen