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.Indentkann verwendet werden, um vorhandene JSON-Strings "pretty" auszugeben.json.Encoderbietet 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:
dataist eine Map, die eine Beispiel-Datenstruktur darstellt.json.MarshalIndentserialisiertdatain 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
jsonDatawird 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:
jsonStringenthält die minimierten JSON-Daten.json.Indentliest 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



