Kennt jemand eine einfache Möglichkeit, JSON-Ausgaben in Go hübsch zu drucken?
Das Standardpaket http://golang.org/pkg/encoding/json/ scheint keine Funktionalität dafür zu enthalten (BEARBEITEN: siehe akzeptierte Antwort), und eine schnelle Google-Suche zeigt nichts Offensichtliches.
Die von mir gesuchten Verwendungszwecke sind das hübsche Drucken des Ergebnisses json.Marshal
und das Formatieren einer Zeichenfolge voller JSON von überall, sodass das Lesen für Debug-Zwecke einfacher ist.
json
go
pretty-print
Brad Peabody
quelle
quelle
{name: "value"}
wird nicht in Ordnung sein, obwohl die meisten Javascript-Interpreter es verwenden . Funktioniert nur{"name": "value"}
mit den Funktionen der Go JSON-Bibliothek.Antworten:
Mit hübschem Druck meine ich, dass Sie so eingerückt meinen
eher, als
Der einfachste Weg, dies zu tun, ist mit
MarshalIndent
, mit dem Sie angeben können, wie es über dasindent
Argument eingerückt werden soll . Somitjson.MarshalIndent(data, "", " ")
wird mit vier Leerzeichen zum Einrücken hübsch gedruckt.quelle
json.MarshalIndent(data, "", "\t")
wenn Sie Registerkarten möchten.json.MarshalIndent(data, "", "🐱")
wenn du Katzen willst. Entschuldigungjson.MarshalIndent(data, "", "\t🐱")
wenn Sie wollen ... Tabby Katzen ... EntschuldigungDie akzeptierte Antwort ist großartig, wenn Sie ein Objekt haben, das Sie in JSON verwandeln möchten. In der Frage wird auch erwähnt, dass nur eine beliebige JSON-Zeichenfolge hübsch gedruckt wird, und genau das habe ich versucht. Ich wollte nur etwas JSON von einer POST-Anfrage (insbesondere einem CSP-Verstoßbericht ) hübsch protokollieren .
Um zu verwenden
MarshalIndent
, müssten SieUnmarshal
das in ein Objekt. Wenn Sie das brauchen, machen Sie es, aber ich habe es nicht getan. Wenn Sie nur ein Byte-Array hübsch drucken müssen, ist plainIndent
Ihr Freund.Folgendes habe ich erreicht:
quelle
Für eine bessere Speichernutzung ist dies vermutlich besser:
quelle
SetIndent
kürzlich hinzugefügt? Es ist den meisten im Wesentlichen unbekannt.SetIndent
(ursprünglich benanntIndent
) wurde anscheinend im März 2016 hinzugefügt und in Go 1.7 veröffentlicht, ungefähr 3 Jahre nachdem diese Frage ursprünglich gestellt wurde: github.com/golang/go/commit/… github.com/golang/go/commit/ …Ich war frustriert über das Fehlen einer schnellen und qualitativ hochwertigen Möglichkeit, JSON für eine kolorierte Zeichenfolge in Go zu marshallen, und schrieb meinen eigenen Marshaller namens ColorJSON .
Mit ihm können Sie auf einfache Weise eine Ausgabe wie diese mit sehr wenig Code erstellen:
Ich schreibe gerade die Dokumentation dafür, aber ich war begeistert, meine Lösung zu teilen.
quelle
Bearbeiten Rückblickend ist dies nicht idiomatisch Go. Kleine Hilfsfunktionen wie diese erhöhen die Komplexität zusätzlich. Im Allgemeinen zieht die Go-Philosophie es vor, die 3 einfachen Zeilen gegenüber einer kniffligen Zeile einzuschließen.
Wie @robyoder erwähnt,
json.Indent
ist der richtige Weg. Ich dachte, ich würde diese kleineprettyprint
Funktion hinzufügen :https://go-sandbox.com/#/R4LWpkkHIN oder http://play.golang.org/p/R4LWpkkHIN
quelle
Folgendes benutze ich. Wenn der JSON nicht schön gedruckt werden kann, wird nur die ursprüngliche Zeichenfolge zurückgegeben. Nützlich zum Drucken von HTTP-Antworten, die JSON enthalten sollten .
quelle
Hier ist meine Lösung :
quelle
Ein einfacher hübscher Drucker von der Stange in Go. Man kann es zu einer Binärdatei kompilieren durch:
Es liest von der Standardeingabe, schreibt in die Standardausgabe und ermöglicht das Festlegen von Einrückungen:
Es ermöglicht das Ausführen von Bash-Befehlen wie:
quelle
quelle
Ich bin ein bisschen neu, aber das habe ich bisher gesammelt:
Dies ist die Ausführung der Funktion und nur Standard
Code:
quelle
quelle