Wie man `json.MarshalIndent` in Golang verwendet
Emily Parker
Product Engineer · Leapcell

Key Takeaways
json.MarshalIndentformatiert JSON mit anpassbarer Einrückung und Präfixen.- Es verbessert die JSON-Lesbarkeit und macht es nützlich für Debugging und Protokollierung.
- Eine ordnungsgemäße Fehlerbehandlung ist notwendig, um Probleme mit nicht unterstützten Datentypen zu vermeiden.
Einführung
Bei der Arbeit mit JSON in Golang bietet das Paket encoding/json die Funktion json.Marshal zum Serialisieren von Go-Datenstrukturen in das JSON-Format. Die Standardausgabe von json.Marshal ist jedoch kompakt, d. h. sie enthält keine zusätzlichen Leerzeichen oder Einrückungen. Wenn Sie eine menschenlesbare, formatierte JSON-Ausgabe benötigen, können Sie json.MarshalIndent verwenden.
Dieser Artikel erklärt, wie Sie json.MarshalIndent effektiv verwenden und bietet praktische Beispiele.
json.MarshalIndent verstehen
Die Funktion json.MarshalIndent ähnelt json.Marshal, ermöglicht es Ihnen jedoch, Einrückungseinstellungen anzugeben. Die Funktionssignatur lautet wie folgt:
func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)
vist der Go-Wert, der in JSON serialisiert werden soll.prefixist eine Zeichenkette, die jeder Zeile der Ausgabe vorangestellt wird.indentdefiniert die für die Formatierung verwendeten Einrückungszeichen.- Die Funktion gibt ein
[]bytezurück, das das formatierte JSON enthält, und einenerror, falls die Serialisierung fehlschlägt.
Grundlegendes Beispiel
Betrachten wir ein einfaches Beispiel mit json.MarshalIndent:
package main import ( "encoding/json" "fmt" ) type User struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email"` } func main() { user := User{ Name: "Alice", Age: 25, Email: "alice@example.com", } // MarshalIndent mit zwei Leerzeichen für die Einrückung jsonData, err := json.MarshalIndent(user, "", " ") if err != nil { fmt.Println("Error:", err) return } // JSON-Bytes in eine Zeichenkette konvertieren und ausgeben fmt.Println(string(jsonData)) }
Ausgabe
{ "name": "Alice", "age": 25, "email": "alice@example.com" }
Erklärung
- Das zweite Argument (
"") ist ein leeres Präfix, d. h. am Anfang jeder Zeile stehen keine zusätzlichen Zeichen. - Das dritte Argument (
" ") gibt an, dass jede Einrückungsebene zwei Leerzeichen verwendet. - Das ausgegebene JSON ist korrekt mit Zeilenumbrüchen und Einrückungen formatiert, was es leichter lesbar macht.
Anpassen der Einrückung
Sie können den Parameter indent anpassen, um verschiedene Formatierungsstile zu verwenden.
Verwenden von Tabulatoren anstelle von Leerzeichen
jsonData, err := json.MarshalIndent(user, "", "\t")
Dies erzeugt JSON mit Tabulator-Einrückung anstelle von Leerzeichen.
Hinzufügen eines Präfixes
jsonData, err := json.MarshalIndent(user, "> ", " ")
Dies fügt ein Präfix "> " vor jeder Zeile hinzu:
> { > "name": "Alice", > "age": 25, > "email": "alice@example.com" > }
Umgang mit verschachtelten Strukturen
json.MarshalIndent funktioniert gut mit verschachtelten Strukturen. Hier ist ein Beispiel mit einer eingebetteten Struktur:
type Address struct { City string `json:"city"` State string `json:"state"` } type UserWithAddress struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email"` Address Address `json:"address"` } func main() { user := UserWithAddress{ Name: "Bob", Age: 30, Email: "bob@example.com", Address: Address{ City: "New York", State: "NY", }, } jsonData, err := json.MarshalIndent(user, "", " ") if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(jsonData)) }
Ausgabe
{ "name": "Bob", "age": 30, "email": "bob@example.com", "address": { "city": "New York", "state": "NY" } }
Fehlerbehandlung
Wenn json.MarshalIndent auf einen nicht unterstützten Typ stößt (z. B. einen Kanal oder eine Funktion), wird ein Fehler zurückgegeben. Überprüfen Sie immer auf Fehler, bevor Sie die zurückgegebenen JSON-Daten verwenden:
jsonData, err := json.MarshalIndent(user, "", " ") if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(jsonData))
Fazit
json.MarshalIndent ist eine nützliche Funktion in Golang zum Erzeugen von menschenlesbarem JSON mit Einrückung. Durch Angabe eines Präfixes und einer Einrückungszeichenkette können Sie das Ausgabeformat an Ihre Bedürfnisse anpassen. Es ist besonders nützlich beim Protokollieren von JSON-Antworten, beim Debuggen oder beim Speichern von Konfigurationsdateien in einem lesbaren Format.
Durch die Beherrschung von json.MarshalIndent können Sie die Lesbarkeit Ihrer JSON-Daten verbessern und die Arbeit damit in Entwicklungs- und Debugging-Szenarien erleichtern.
FAQs
json.Marshal erzeugt kompaktes JSON, während json.MarshalIndent JSON mit Einrückung formatiert, um die Lesbarkeit zu verbessern.
Ja, indem Sie "\t" als Einrückungsparameter in json.MarshalIndent übergeben.
json.MarshalIndent gibt einen Fehler zurück, daher sollten Sie Fehler immer ordnungsgemäß behandeln.
Wir sind Leapcell, Ihre erste Wahl für das Hosten von Go-Projekten.
Leapcell ist die Next-Gen Serverless-Plattform für Webhosting, asynchrone Aufgaben und Redis:
Mehrsprachige Unterstützung
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt Projekte kostenlos bereit
- Zahlen Sie nur für die Nutzung – keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 US-Dollar unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und -protokollierung für verwertbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Automatische Skalierung zur einfachen Bewältigung hoher Parallelität.
- Kein Betriebsaufwand – konzentrieren Sie sich einfach auf das Bauen.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ



