Unterscheidung von Null- und nicht vorhandenen JSON-Feldern in Go
Beim Unmarshalling von JSON in Go-Strukturen kann es schwierig sein, zwischen JSON-Feldern zu unterscheiden die explizit auf null gesetzt sind und solche, die einfach nicht in der JSON-Nutzlast vorhanden sind. Diese Unterscheidung ist in vielen Szenarien von entscheidender Bedeutung, da sie sich auf die Semantik der Daten und ihre Interpretation auswirkt.
Go 1.18-Lösung
Beginnend mit Go 1.18, einer generischen optionalen Struktur kann zur Behebung dieses Problems verwendet werden:
type Optional[T any] struct { Defined bool Value *T }
Diese Struktur implementiert die UnmarshalJSON-Schnittstelle und ermöglicht so Es dient dazu, definierte und undefinierte Werte zu unterscheiden. Beim Unmarshalling einer JSON-Nutzlast wird das definierte Feld der optionalen Struktur auf „true“ gesetzt, unabhängig davon, ob der Wert null oder ein gültiger Wert ist.
Beispielverwendung
type Payload struct { Field1 Optional[string] `json:"field1"` Field2 Optional[bool] `json:"field2"` Field3 Optional[int32] `json:"field3"` }
Nach dem Unmarshalling einer JSON-Nutzlast kann das definierte Feld verwendet werden, um zu bestimmen, ob ein bestimmtes Feld im JSON vorhanden war oder nicht.
Lösung vor Go 1.18
Für Versionen von Go vor 1.18 kann ein benutzerdefinierter Typ erstellt werden, um das gleiche Ergebnis zu erzielen.
type OptionalString struct { Defined bool Value *string }
Ähnlich wie die optionale Struktur in Go 1.18 implementiert dieser Typ die UnmarshalJSON-Schnittstelle, um das Definierte festzulegen Feld entsprechend aus.
Beispielverwendung
type Payload struct { SomeField1 string `json:"somefield1"` SomeField2 OptionalString `json:"somefield2"` }
Durch die Verwendung dieses benutzerdefinierten Typs kann das definierte Feld überprüft werden, um zwischen Null- und nicht vorhandenen Feldern zu unterscheiden.
Das obige ist der detaillierte Inhalt vonWie kann ich in Go zwischen Null- und fehlenden JSON-Feldern unterscheiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!