Wie man JSON in Go schön formatiert
Grace Collins
Solutions Engineer · Leapcell

Key Takeaways
- Verwenden Sie
json.MarshalIndent
, um Go-Datenstrukturen in lesbares JSON zu formatieren. json.Indent
kann verwendet werden, um vorhandene JSON-Strings "pretty" auszugeben.json.Encoder
bietet eine speichereffiziente Möglichkeit, JSON-Ausgabe zu formatieren.
In Go bezieht sich "Pretty Printing" von JSON auf das Formatieren von JSON-Daten mit Einrückungen und Zeilenumbrüchen, um die Lesbarkeit zu verbessern. Dies ist besonders nützlich, wenn JSON in Protokollen oder Konsolenausgaben angezeigt wird. Die Go-Standardbibliothek bietet über das Paket encoding/json
integrierte Unterstützung hierfür.
Verwenden von json.MarshalIndent
zum Pretty Print von JSON
Das Paket encoding/json
bietet die Funktion MarshalIndent
, die Go-Datenstrukturen mit Einrückung in JSON serialisiert. So verwenden Sie es:
package main import ( "encoding/json" "fmt" ) func main() { // Beispiel-Datenstruktur data := map[string]interface{}{ "Name": "Alice", "Age": 30, "Active": true, "Skills": []string{"Go", "Docker", "Kubernetes"}, } // In Pretty-Printed JSON konvertieren jsonData, err := json.MarshalIndent(data, "", " ") if err != nil { fmt.Println("Fehler beim Marshalling von JSON:", err) return } // Das formatierte JSON ausgeben fmt.Println(string(jsonData)) }
In diesem Beispiel:
data
ist eine Map, die eine Beispiel-Datenstruktur darstellt.json.MarshalIndent
serialisiertdata
in ein JSON-formatiertes Byte-Slice mit Einrückung.- Das zweite Argument (
""
) gibt das Präfix für jede Zeile an (in diesem Fall keines). - Das dritte Argument (
" "
) gibt die Einrückungszeichenfolge an (hier vier Leerzeichen). - Das resultierende
jsonData
wird in einen String konvertiert und ausgegeben.
Die Ausgabe ist:
{ "Active": true, "Age": 30, "Name": "Alice", "Skills": [ "Go", "Docker", "Kubernetes" ] }
Pretty Printing vorhandener JSON-Strings
Wenn Sie einen JSON-String haben und diesen "pretty" ausgeben möchten, können Sie die Funktion json.Indent
verwenden:
package main import ( "bytes" "encoding/json" "fmt" ) func main() { // Minimierter JSON-String jsonString := `{"Name":"Alice","Age":30,"Active":true,"Skills":["Go","Docker","Kubernetes"]}` // String in Byte-Slice konvertieren jsonData := []byte(jsonString) // Einen Puffer erstellen, um das formatierte JSON zu speichern var prettyJSON bytes.Buffer // Das JSON einrücken err := json.Indent(&prettyJSON, jsonData, "", " ") if err != nil { fmt.Println("Fehler beim Einrücken von JSON:", err) return } // Das formatierte JSON ausgeben fmt.Println(prettyJSON.String()) }
In diesem Code:
jsonString
enthält die minimierten JSON-Daten.json.Indent
liest das minimierte JSON und schreibt eine formatierte Version inprettyJSON
.- Das formatierte JSON wird dann als String ausgegeben.
Die Ausgabe ist identisch mit dem vorherigen Beispiel.
Verwenden von json.Encoder
mit Einrückung
Alternativ können Sie json.Encoder
verwenden, um JSON direkt in einen io.Writer
wie os.Stdout
"pretty" auszugeben:
package main import ( "encoding/json" "os" ) func main() { // Beispiel-Datenstruktur data := map[string]interface{}{ "Name": "Alice", "Age": 30, "Active": true, "Skills": []string{"Go", "Docker", "Kubernetes"}, } // Einen JSON-Encoder mit Einrückung erstellen encoder := json.NewEncoder(os.Stdout) encoder.SetIndent("", " ") // Die Daten kodieren und ausgeben err := encoder.Encode(data) if err != nil { fmt.Println("Fehler beim Kodieren von JSON:", err) } }
Dieser Ansatz ist effizient, wenn Sie formatiertes JSON direkt in einen Ausgabestream schreiben möchten, ohne es im Speicher zu halten.
Fazit
Das Paket encoding/json
von Go bietet mehrere Methoden, um JSON-Daten "pretty" auszugeben und so die Lesbarkeit in Protokollen und Konsolenausgaben zu verbessern. Ob Sie json.MarshalIndent
, json.Indent
oder json.Encoder
mit Einrückung verwenden, Sie können die Methode wählen, die am besten zu Ihrem Anwendungsfall passt.
FAQs
json.MarshalIndent
formatiert Go-Datenstrukturen in JSON, während json.Indent
vorhandene JSON-Strings neu formatiert.
Verwenden Sie json.Encoder
, wenn Sie direkt in einen io.Writer
schreiben, um unnötige Speichernutzung zu vermeiden.
Ja, das dritte Argument in json.MarshalIndent
gibt die Einrückungszeichenfolge an (z. B. Leerzeichen oder Tabulatoren).
Wir sind Leapcell, Ihre erste Wahl für das Hosting von Go-Projekten.
Leapcell ist die Next-Gen Serverless Plattform für Webhosting, Async Tasks und Redis:
Multi-Language Support
- 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 $ unterstützt 6,94 Mio. 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