JSON-Kodierung und -Dekodierung
Marshal, Unmarshal und Struct-Tags
JSON-Kodierung und -Dekodierung ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Überblick über encoding/json
Das Go-Paket encoding/json marshalt Go-Werte mithilfe von Struct-Tags und Reflection in JSON und unmarshalt JSON zurück in Go-Werte.
json.Marshal
json.Marshal konvertiert einen Go-Wert in JSON-Bytes. Für nicht unterstützte Typen wie Channels, Funktionen oder komplexe Zahlen wird ein Fehler zurückgegeben.
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
u := User{Name: "Alice", Age: 30}
data, err := json.Marshal(u)
fmt.Println(string(data)) // {"name":"Alice","age":30}json.Unmarshal
json.Unmarshal decodiert JSON in einen Go-Wert. Das Ziel muss ein Pointer sein.
var u User
err := json.Unmarshal(data, &u)
fmt.Println(u.Name) // "Alice"Struct-Tags
Verwenden Sie json:-Struct-Tags, um Feldnamen zu steuern, leere Werte wegzulassen und nicht exportierte Felder zu überspringen.
type Product struct {
ID int `json:"id"`
Price float64 `json:"price,omitempty"` // omit if zero
secret string // unexported: ignored
}json.Encoder / json.Decoder
Verwenden Sie für Streaming, etwa bei HTTP-Antwort- und Anfrage-Bodys, Encoder und Decoder statt Marshal und Unmarshal, um nicht die gesamte Nutzlast in den Speicher laden zu müssen.
// Writing
json.NewEncoder(w).Encode(user)
// Reading
var u User
json.NewDecoder(r.Body).Decode(&u)In map[string]any decodieren
Decodieren Sie unbekanntes JSON in eine generische Map:
var m map[string]any
json.Unmarshal(data, &m)
fmt.Println(m["name"])json.Number
Standardmäßig werden Zahlen in generischen Maps als float64 decodiert. Verwenden Sie decoder.UseNumber(), um sie als json.Number zu decodieren und dabei die Genauigkeit zu bewahren.
dec := json.NewDecoder(r)
dec.UseNumber()
var m map[string]any
dec.Decode(&m)Benutzerdefiniertes Marshaling
Implementieren Sie json.Marshaler oder json.Unmarshaler, um die Kodierung und Decodierung eines Typs zu steuern, beispielsweise für benutzerdefinierte Datumsformate.
func (d Date) MarshalJSON() ([]byte, error) {
return json.Marshal(d.Format("2006-01-02"))
}Felder weglassen
Verwenden Sie omitempty, um Nullwerte zu überspringen. Verwenden Sie json:"-", um ein Feld unabhängig von seinem Wert immer aus der JSON-Ausgabe auszuschließen.
Hidden string `json:"-"`null verarbeiten
JSON-null wird beim Unmarshaling für skalare Werte in einen Go-Nullwert umgewandelt oder setzt einen Pointer auf nil. Ein nil-Pointer wird beim Marshaling als null ausgegeben.
Lesbare Ausgabe
Verwenden Sie json.MarshalIndent für eine menschenlesbare Ausgabe:
data, _ := json.MarshalIndent(u, "", " ")Kurzer Test
Was bewirkt das Struct-Tag `json:"name,omitempty"`?
Zusammenfassung: JSON-Kodierung und -Decodierung
Wichtige Punkte:
- json.Marshal/Unmarshal für Daten im Speicher; Encoder/Decoder für Streams
- Struct-Tags steuern Namen, omitempty und den Ausschluss von Feldern
- Benutzerdefinierte Typen implementieren Marshaler/Unmarshaler
- Verwenden Sie json.MarshalIndent für Debug-Ausgaben
Häufig gestellte Fragen
Ist die Lektion „JSON-Kodierung und -Dekodierung“ kostenlos?
Ja — der vollständige Text von „JSON-Kodierung und -Dekodierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „JSON-Kodierung und -Dekodierung“?
Marshal, Unmarshal und Struct-Tags Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „JSON-Kodierung und -Dekodierung“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Dateien mit os und bufio lesen
- Dateien und temporäre Dateien schreiben
- JSON-Kodierung und -Dekodierung
- JSON und CSV streamen