0Pricing
Go Academy · Lektion

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

  1. Dateien mit os und bufio lesen
  2. Dateien und temporäre Dateien schreiben
  3. JSON-Kodierung und -Dekodierung
  4. JSON und CSV streamen
← Zurück zu Go Academy