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

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

Patricia Arquette
Freigeben: 2024-12-12 20:32:15
Original
370 Leute haben es durchsucht

How Can I Differentiate Between Empty and Undefined Fields When Unmarshaling JSON in Go?

Die Leere enthüllen: Undefinierte Felder im Unmarshaling-Prozess von Go erkennen

Beim Unmarshaling von JSON-Daten in Go-Strukturen wird zwischen leeren Werten und nicht spezifizierten Feldern unterschieden kann für den Umgang mit Dateninkonsistenzen von entscheidender Bedeutung sein. Betrachten Sie das folgende Beispiel:

var jsonBlob = []byte(`[
    {"Name": "A", "Description": "Monotremata"},
    {"Name": "B"},
    {"Name": "C", "Description": ""}
]`)

type Category struct {
    Name  string
    Description string
}

var categories []Category
err := json.Unmarshal(jsonBlob, &categories)

if err != nil {
    fmt.Println("error:", err)
}
fmt.Printf("%+v", categories)
Nach dem Login kopieren

Das Ausführen dieses Codes erzeugt die folgende Ausgabe:

[
  {Name:A Description:Monotremata}
  {Name:B Description:}
  {Name:C Description:}
]
Nach dem Login kopieren

Wie Sie sehen können, ist es unmöglich, zwischen einem undefinierten Feld „Beschreibung“ (wie in „Kategorie B“) und ein leeres Feld „Beschreibung“ (wie in „Kategorie C“). Diese Mehrdeutigkeit kann zu fehlerhaftem Programmverhalten führen.

Lösung: Verwendung von Zeigern zur Unterscheidung

Um diese Herausforderung zu meistern, können Sie den Feldtyp so ändern, dass er ein Zeiger ist. Wenn die JSON-Daten einen leeren String-Wert enthalten, wird ein Zeiger auf einen leeren String erstellt. Wenn das Feld jedoch nicht in den JSON-Daten vorhanden ist, bleibt es Null.

type Category struct {
    Name        string
    Description *string
}
Nach dem Login kopieren

Mit dieser Änderung lautet die aktualisierte Ausgabe:

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

Jetzt können Sie ganz einfach zwischen leeren Werten und nicht spezifizierten Feldern unterscheiden. Ein Nicht-Null-Zeiger weist auf einen leeren Wert hin, während ein Null-Zeiger darauf hinweist, dass das Feld in den JSON-Daten nicht vorhanden war. Dadurch können Sie diese Fälle in Ihrem Programm anders behandeln und so Datengenauigkeit und angemessenes Verhalten sicherstellen.

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