Heim >Backend-Entwicklung >Golang >Wie kann ich in Go zwischen Null- und fehlenden JSON-Feldern unterscheiden?
Unterscheidung von Null- und fehlenden JSON-Feldern in Go
In Go entstehen beim Unmarshalling von JSON-Daten in eine Struktur sowohl Nullfelder als auch fehlende Felder in Nullwerten in der resultierenden Struktur. Dies kann eine Herausforderung sein, wenn es wichtig ist, zwischen den beiden Szenarien zu unterscheiden, z. B. wenn ein Feld, das null ist, eine bestimmte Absicht anzeigt, während sein Fehlen darauf hinweist, dass es nie vorhanden war.
Verwendung optionaler Strukturen (Go 1.18)
Für Go 1.18 und höher ermöglichen Generika eine unkomplizierte Lösung mithilfe einer benutzerdefinierten Struktur: Optional[T]. Diese Struktur enthält ein definiertes boolesches Feld, das das Vorhandensein des Felds in der JSON-Nutzlast angibt, und ein Wertfeld, das den tatsächlichen Wert enthält. Wenn beim Unmarshalling der Wert definiert (nicht null) ist, wird UnmarshalJSON aufgerufen und die Felder „Definiert“ und „Wert“ entsprechend festgelegt.
type Optional[T any] struct { Defined bool Value *T }
type Payload struct { Field1 Optional[string] `json:"field1"` Field2 Optional[bool] `json:"field2"` Field3 Optional[int32] `json:"field3"` }
Durch Überprüfen des Felds „Definiert“ können Sie erkennen, ob ein Feld vorhanden war null oder undefiniert.
Benutzerdefinierter Unmarshaler mit Vor-Generika
Vor Go 1.18 kann zu diesem Zweck ein benutzerdefinierter Unmarshaler verwendet werden:
type OptionalString struct { Defined bool Value *string } func (os *OptionalString) UnmarshalJSON(data []byte) error { // UnmarshalJSON is called only if the key is present os.Defined = true return json.Unmarshal(data, &os.Value) }
type Payload struct { SomeField1 string `json:"somefield1"` SomeField2 OptionalString `json:"somefield2"` }
Bei diesem Ansatz implementiert die OptionalString-Struktur den JSON. Unmarshaler-Schnittstelle, Einstellung „Definiert“ auf „true“, wenn das Feld in der JSON-Nutzlast vorhanden ist. Dies ermöglicht die Unterscheidung zwischen Feldern, die null sind, und solchen, die nicht vorhanden sind.
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!