Heim >Backend-Entwicklung >Golang >Wie kann ich beim Unmarshaling in Go zwischen JSON-Null- und fehlenden Feldern unterscheiden?

Wie kann ich beim Unmarshaling in Go zwischen JSON-Null- und fehlenden Feldern unterscheiden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-03 21:03:17454Durchsuche

How Can I Distinguish Between JSON Null and Missing Fields When Unmarshaling in Go?

Unterscheidung von auf Null gesetzten und nicht vorhandenen JSON-Feldern beim Unmarshaling

Beim Unmarshaling von JSON in einer Golang-Struktur wird zwischen auf Null gesetzten Feldern unterschieden und Felder, die nicht vorhanden sind, können entscheidend sein. Beide Szenarien führen zu Nullwerten in der Struktur, wodurch die beabsichtigte Semantik verschleiert wird.

Differenzierung mithilfe von Generika (Go 1.18)

Go 1.18 führt Generika ein und ermöglicht eine präzise Lösung mit ein einzelner generischer Typ:

type Optional[T any] struct {
    Defined bool
    Value   *T
}

Dieser Typ kapselt das Konzept eines optionalen Werts mit einem definierten Feldstatus (Definiert).

Beispielverwendung:

type Payload struct {
    Field1 Optional[string] `json:"field1"`
    Field2 Optional[int]   `json:"field2"`
}

Nach dem Unmarshaling werden Felder mit definierten Werten (Definiert = = true) kann zwischen Nullwerten (Value == nil) und fehlenden Werten (Defined ==) unterscheiden false).

Pre-Generics Solutions

Benutzerdefinierter Typ-Wrapper:

type OptionalString struct {
    Defined bool
    Value   *string
}

func (os *OptionalString) UnmarshalJSON(data []byte) error {
    os.Defined = true
    return json.Unmarshal(data, &os.Value)
}

Beispiel Verwendung:

type Payload struct {
    Field1 string         `json:"field1"`
    Field2 OptionalString `json:"field2"`
}

Einschränkungen:

  • Erfordert einen dedizierten Struktur-Wrapper für jeden unterstützten Typ (z. B. OptionalNumber für numerische Typen).
  • Bietet keine umfassende Unterscheidung zwischen Null- und fehlenden Werten.

Das obige ist der detaillierte Inhalt vonWie kann ich beim Unmarshaling in Go zwischen JSON-Null- und fehlenden Feldern unterscheiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn