Golang JSON-Tags verstehen
Emily Parker
Product Engineer · Leapcell

Key Takeaways
- Golang JSON-Tags steuern, wie Strukturfelder serialisiert und deserialisiert werden.
- Optionen wie
omitempty
und-
modifizieren die Feldaufnahme in der JSON-Ausgabe. - Die Option
string
zwingt numerische und boolesche Felder, als Zeichenketten serialisiert zu werden.
In Go spielen Struktur-Tags eine entscheidende Rolle bei der Steuerung der Kodierung und Dekodierung von JSON-Daten. Durch die Nutzung von json
-Tags können Entwickler anpassen, wie Strukturfelder auf JSON-Schlüssel abgebildet werden, was sowohl die Serialisierung (Marshaling) als auch die Deserialisierungsprozesse (Unmarshaling) beeinflusst.
Grundlegende Verwendung von JSON-Tags
Betrachten Sie die folgende Strukturdefinition:
type Person struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email,omitempty"` }
Hier geben die Struktur-Tags die JSON-Schlüsselnamen an, die jedem Feld entsprechen:
Name
wird auf"name"
abgebildet.Age
wird auf"age"
abgebildet.Email
wird auf"email"
abgebildet, enthält aber die Optionomitempty
.
Die Option omitempty
stellt sicher, dass das Feld Email
aus der JSON-Ausgabe weggelassen wird, wenn es leer ist (d. h. seinen Nullwert hat).
Ignorieren von Feldern während der Serialisierung
Um ein Strukturfeld von der JSON-Serialisierung auszuschließen, verwenden Sie das -
-Tag:
type Person struct { Name string `json:"name"` Age int `json:"age"` Secret string `json:"-"` }
In diesem Beispiel wird das Feld Secret
sowohl während des Marshalings als auch des Unmarshalings ignoriert.
Umgang mit leeren Werten mit omitempty
Die Tag-Option omitempty
verhindert, dass Felder mit Nullwerten in der JSON-Ausgabe erscheinen:
type Person struct { Name string `json:"name"` Age int `json:"age,omitempty"` Email *string `json:"email,omitempty"` }
Wenn Age
gleich 0
oder Email
gleich nil
ist, werden diese Felder aus dem serialisierten JSON weggelassen.
Verwenden der Tag-Option string
Die Option string
weist den Encoder an, numerische oder boolesche Felder als JSON-Zeichenketten zu serialisieren:
type Person struct { ID int `json:"id,string"` Name string `json:"name"` Active bool `json:"active,string"` }
Hier werden ID
und Active
als Zeichenketten in der JSON-Ausgabe dargestellt.
Mehrere Tags und Reflexion
Go unterstützt mehrere Tags für verschiedene Zwecke:
type Person struct { Name string `json:"name" xml:"name"` Age int `json:"age" xml:"age"` }
Mit Hilfe von Reflexion können Sie diese Tags zur Laufzeit abrufen:
t := reflect.TypeOf(Person{}) field, _ := t.FieldByName("Name") jsonTag := field.Tag.Get("json") xmlTag := field.Tag.Get("xml")
Schlussfolgerung
Das Verständnis und die Verwendung von JSON-Tags in Go-Strukturen ermöglicht eine präzise Kontrolle über die JSON-Serialisierung und -Deserialisierung und erleichtert den nahtlosen Datenaustausch zwischen Go-Anwendungen und anderen Systemen.
Weitere detaillierte Beispiele und erweiterte Verwendung finden Sie in der offiziellen Go-Dokumentation und den Community-Ressourcen.
FAQs
Der Feldname wird als Standard-JSON-Schlüssel in Camel Case verwendet.
Ja, Sie können mehrere Struktur-Tags für verschiedene Kodierungsformate verwenden.
Verwenden Sie json:"-"
, um zu verhindern, dass ein Feld in die JSON-Ausgabe aufgenommen wird.
Wir sind Leapcell, Ihre erste Wahl für das Hosten von Go-Projekten.
Leapcell ist die Serverlose Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Multi-Sprachen-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 $ 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.
- Echtzeit-Metriken und -Protokollierung für verwertbare Informationen.
Mühelose Skalierbarkeit und hohe Leistung
- Automatische Skalierung zur einfachen Bewältigung hoher Parallelität.
- Kein Betriebsaufwand — konzentrieren Sie sich einfach auf den Aufbau.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ