Pretty JSON-Druck in Go (Pretty Print JSON)

Pretty Json Druck In Go Pretty Print Json



Wie wir alle wissen, ist JavaScript oder JSON ein beliebtes und leistungsstarkes Datenaustauschformat, das sowohl für Maschinen als auch für Menschen leicht zu lesen und zu schreiben ist. JSON ist für eine Vielzahl von Anwendungen unglaublich beliebt, einschließlich, aber nicht beschränkt auf APIs und mehr.

Daher überrascht es nicht, dass Go über eine native Unterstützung für die Arbeit mit JSON-Daten verfügt, beispielsweise für die Serialisierung und Deserialisierung der JSON-Daten. Ganz gleich, ob Sie eine API-Antwort oder Konfigurationsdateien analysieren, die Strukturdaten speichern und vieles mehr – Go verfügt über alle Tools dafür.

Während die Analyse von JSON für Maschinen eine Herausforderung darstellt, kann es für uns jedoch schwierig sein, die Ausgabe schnell zu formatieren und das tatsächliche Layout zu verstehen.







Hier kommt hübscher Druck ins Spiel. In diesem Tutorial erkunden wir die Funktionsweise von JSON mit Go und erforschen die Methoden, mit denen wir JSON aus der Ausgabe hübsch drucken können.



JSON in Go

Bevor wir uns mit dem hübschen Drucken in JSON befassen, beginnen wir mit den Grundlagen der Arbeit mit JSON in Go.



JSON kodieren

Unter JSON-Codierung versteht man den Prozess der Konvertierung der Daten aus der nativen Datenstruktur in das JSON-Format.





In Go können wir die Datenkodierung in JSON mithilfe von „encoding/JSON“ durchführen. Eine Beispieldemonstration sieht wie folgt aus:

Paket hauptsächlich
importieren (
„Kodierung/json“
„fmt“
)

Typ Verbindung Struktur {
Hostname Zeichenfolge `json:'hostname'`
Hafen int `json:'port'`
Auth Zeichenfolge `json:'auth'`
}
Funktion hauptsächlich () {
Anschl := Verbindung {
Hostname : „localhost“ ,
Hafen : 4493 ,
Auth : „root:password?auth=88su“ ,
}
jsonBytes , irren := json . Marshall ( Anschl )
Wenn irren != Null {
fmt . Druckenln ( „Fehler bei der JSON-Codierung:“ , irren )
zurückkehren
}
fmt . Druckenln ( Zeichenfolge ( jsonBytes ))
}

In diesem Beispiel definieren wir eine „Connection“-Struktur und verwenden „json.Marshal“ aus dem encode/JSON-Paket, um sie in JSON-Daten zu konvertieren.



Das resultierende JSON-Objekt sieht wie folgt aus:

{ „Hostname“ : „localhost“ , 'Hafen' : 4493 , „authentifizieren“ : „root:password?auth=88su“ }

JSON dekodieren

Unter Dekodierung versteht man den Prozess, bei dem ein JSON-Objekt genommen und in eine gültige Go-Datenstruktur dekonstruiert wird.

Wie Sie sich vorstellen können, verwenden wir die Funktion „json.Unmarshall“, wie im folgenden Beispielcode gezeigt:

Paket hauptsächlich
importieren (
„Kodierung/json“
„fmt“
)

Typ Verbindung Struktur {
Hostname Zeichenfolge `json:'hostname'`
Hafen int `json:'port'`
Auth Zeichenfolge `json:'auth'`
}
Funktion hauptsächlich () {
jsonStr := `{'hostname': 'localhost', 'port': 4493, 'auth': 'root:password?auth=88su'}`
War conn-Verbindung
irren := json . Unmarshal ([] Byte ( jsonStr ), &conn )
Wenn irren != Null {
fmt . Druckenln ( „Fehler beim Dekodieren von JSON:“ , irren )
zurückkehren
}
fmt . Druckenln ( „Hostname:“ , Anschl . Hostname )
fmt . Druckenln ( 'Hafen:' , Anschl . Hafen )
fmt . Druckenln ( „Auth:“ , Anschl . Auth )
}

In diesem Beispiel verwenden wir die Funktion „json.Unmarshal“, um den bereitgestellten JSON-String in eine „Connection“-Struktur zu dekonstruieren (dekodieren).

Die resultierenden Werte sind wie folgt:

Hostname : localhost
Hafen : 4493
Auth : Wurzel : Passwort?Auth = Es sind 88

JSON Pretty Print in Go

Nachdem wir die Grundlagen der Arbeit mit JSON geklärt haben, lernen wir, wie man den hübschen Druck in Go durchführt.

Was ist hübscher Druck?

JSON Pretty Print bezieht sich auf die Methode, die JSON-Daten in ein benutzerfreundliches Format zu formatieren, das für Menschen sehr einfach zu lesen ist. Dazu gehört das Hinzufügen von Funktionen wie Zeilenumbrüchen, Leerzeichen und mehr.

Dadurch wird es für Menschen einfacher, die Struktur der JSON-Daten visuell zu analysieren und zu verstehen.

Ziel ist es, die JSON-Ausgabe organisierter und ästhetisch ansprechender zu gestalten.

Das Folgende ist ein Beispiel für einen JSON-String in seiner Rohausgabeform:

{ „Hostname“ : „localhost“ , 'Hafen' : 4493 , „authentifizieren“ : „root:password?auth=88su“ }

Dies ist derselbe JSON-String mit aktivierter Pretty-Print-Funktion:

{
„Hostname“ : „localhost“ ,
'Hafen' : 4493 ,
„authentifizieren“ : „root:password?auth=88su“
}

Sie werden feststellen, dass das zweite Beispiel die Augen schont und sehr leicht zu lesen und zu verstehen ist.

Methode 1: Verwenden von Json.MarshalIndent

Das Paket „encoding/JSON“ stellt uns die Funktion „json.MarshalIndent“ zur Verfügung, die es uns ermöglicht, eine Go-Datenstruktur in JSON zu kodieren und die Einrückung für hübsches Drucken beizubehalten.

Die Syntax der Funktion ist wie folgt:

Funktion MarshalIndent ( v irgendein , Präfix , Einzug Zeichenfolge ) ([] Byte , Fehler )

Sie verhält sich ähnlich wie die Marshal-Funktion, wendet jedoch das Einrückungsformat auf die Ausgabe an.

Ein Beispiel ist wie folgt:

Funktion hauptsächlich () {
Anschl := Verbindung {
Hostname : „localhost“ ,
Hafen : 4493 ,
Auth : „root:password?auth=88su“ ,
}
jsonBytes , irren := json . MarshalIndent ( Anschl , „“ , '    ' )
Wenn irren != Null {
fmt . Druckenln ( „Fehler bei der JSON-Codierung:“ , irren )
zurückkehren
}
fmt . Druckenln ( Zeichenfolge ( jsonBytes ))
}

In unserem Beispiel weisen wir die Funktion „MarshalIndent“ an, die Einrückung beizubehalten und vier Leerzeichen zu verwenden.

Die resultierende Ausgabe lautet wie folgt:

{
„Hostname“ : „localhost“ ,
'Hafen' : 4493 ,
„authentifizieren“ : „root:password?auth=88su“
}

Methode 2: Verwenden der benutzerdefinierten Formatierung

Die zweite Methode zur Durchführung des JSON-Pretty-Prints besteht darin, unsere eigene benutzerdefinierte Struktur zu definieren und die Schnittstelle „json.Marshaler“ zu implementieren. Dadurch können wir eine benutzerdefinierte Formatierung für die JSON-Daten definieren, wie im folgenden Beispiel gezeigt:

Paket hauptsächlich
importieren (
„Kodierung/json“
„fmt“
)
Typ Verbindung Struktur {
Hostname Zeichenfolge `json:'hostname'`
Hafen int `json:'port'`
Auth Zeichenfolge `json:'auth'`
}
Funktion ( c Verbindung ) MarshalJSON () ([] Byte , Fehler ) {
formatiert := fmt . Sprintf ( „{ \N ' Hostname ': ' % S ', \N ' Hafen ': %D, \N ' Autor ': ' % S ' \N }' , C . Hostname , C . Hafen , C . Auth )
zurückkehren [] Byte ( formatiert ), Null
}
Funktion hauptsächlich () {
Anschl := Verbindung {
Hostname : „localhost“ ,
Hafen : 4493 ,
Auth : „root:password?auth=88su“ ,
}
jsonBytes , irren := json . Marshall ( Anschl )
Wenn irren != Null {
fmt . Druckenln ( „Fehler bei der JSON-Codierung:“ , irren )
zurückkehren
}
fmt . Druckenln ( Zeichenfolge ( jsonBytes ))
}

In diesem Beispiel erstellen wir eine benutzerdefinierte MarshalJSON-Methode für die „Connection“-Struktur, um die JSON-Zeichenfolge in unsere gewünschte Ausgabe zu formatieren.

Methode 3: Verwendung externer Bibliotheken

Wenn Sie keine Lust haben, ein benutzerdefiniertes Format zu implementieren, können Sie Pakete von Drittanbietern nutzen, die zusätzliche Funktionen bieten.

Sie können das hübsche Paket beispielsweise mit dem folgenden bereitgestellten Link verwenden:

https://github.com/tidwall/pretty

Beginnen Sie mit der Installation des Pakets mit „go get“ wie folgt:

$ gehen erhalten - Du Github . mit / blenden / hübsch

Nach der Installation können wir die Pretty()-Methode verwenden, um den JSON-Pretty-Druck wie folgt durchzuführen:

jsonStr := `{'hostname': 'localhost', 'port': 4493, 'auth': 'root:password?auth=88su'}`
hübschJSON := hübsch . Hübsch ([] Byte ( jsonStr ))
fmt . Druckenln ( Zeichenfolge ( hübschJSON ))

Dies sollte die JSON-Zeichenfolge in eine hübsche Ausgabe formatieren.

Abschluss

In diesem umfassenden Tutorial haben wir alles über die Golang-JSON-Funktionalität gelernt. Wir haben das Marshalling und Unmarshalling der JSON-Daten und mehr behandelt. Schließlich haben wir alle Methoden zum hübschen Drucken der JSON-Daten in Go untersucht, wie z. B. benutzerdefinierte Formatierung mit der Funktion „MarshalIndent“ und mehr.