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

Key Takeaways
json.MarshalIndent
formatiert 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)
v
ist der Go-Wert, der in JSON serialisiert werden soll.prefix
ist eine Zeichenkette, die jeder Zeile der Ausgabe vorangestellt wird.indent
definiert die für die Formatierung verwendeten Einrückungszeichen.- Die Funktion gibt ein
[]byte
zurü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