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

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

Barbara Streisand
Barbara StreisandOriginal
2024-11-30 19:35:12522Durchsuche

How Can I Differentiate Between Null and Missing JSON Fields in Go?

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!

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