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
Freigeben: 2024-11-30 19:35:12
Original
417 Leute haben es durchsucht

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
}
Nach dem Login kopieren

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 Login kopieren

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
}
Nach dem Login kopieren

Ä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"`
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage