Heim >Backend-Entwicklung >Golang >Wie kann ich beim Unmarshaling von JSON in Go zwischen leeren und nicht spezifizierten Feldern unterscheiden?

Wie kann ich beim Unmarshaling von JSON in Go zwischen leeren und nicht spezifizierten Feldern unterscheiden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-09 02:35:10480Durchsuche

How Can I Differentiate Between Void and Unspecified Fields When Unmarshaling JSON in Go?

Erkennen von ungültigen und nicht spezifizierten Feldern beim JSON-Unmarshaling in Go

In JSON kann es schwierig sein, zwischen ungültigen Werten und nicht spezifizierten Feldern zu unterscheiden Entmarshaling von Daten in Go-Strukturen.

Bedenken Sie beispielsweise Folgendes JSON:

[
  {"Name": "A", "Description": "Monotremata"},
  {"Name": "B"},
  {"Name": "C", "Description": ""}
]

Wenn wir eine Go-Struktur wie folgt definieren:

type Category struct {
  Name        string
  Description string
}

und den JSON in einen Abschnitt von Kategorieinstanzen entmarshalieren, erhalten wir die folgende Ausgabe:

[{Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:}]

Beachten Sie, dass das Beschreibungsfeld von B eine leere Zeichenfolge ist, während das Beschreibungsfeld von C im JSON vollständig weggelassen wird. In beiden Fällen wird das Beschreibungsfeld in der Go-Darstellung auf eine leere Zeichenfolge gesetzt.

Um zwischen diesen Fällen zu unterscheiden, besteht ein Ansatz darin, Zeiger für optionale Felder zu verwenden. Indem wir den Beschreibungstyp in einen Zeiger ändern, können wir zwischen einem leeren Zeichenfolgenwert und einem Nullwert (was auf ein nicht spezifiziertes Feld hinweist) unterscheiden:

type Category struct {
  Name        string
  Description *string
}

Wenn wir den JSON in diese geänderte Struktur entmarshalieren, erhalten wir die folgende Ausgabe:

[{Name:A Description:0x1050c150} {Name:B Description:<nil>} {Name:C Description:0x1050c158}]

Wie Sie sehen können, ist das Beschreibungsfeld von B jetzt Null, während das Beschreibungsfeld von C ein Zeiger auf leer ist Zeichenfolge (angegeben durch die hexadezimale Speicheradresse). Dadurch können wir nicht spezifizierte Felder identifizieren und sie in unserem Programm entsprechend behandeln.

Das obige ist der detaillierte Inhalt vonWie kann ich beim Unmarshaling von JSON in Go zwischen leeren und nicht spezifizierten 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