Erkennen leerer und nicht spezifizierter Werte beim Go-Unmarshaling
Beim Unmarshaling von JSON-Daten in Go-Strukturen kann es schwierig sein, zwischen leeren und fehlenden Werten zu unterscheiden Werte. Dies ist besonders wichtig, wenn Sie diese Werte in Ihrem Programm unterschiedlich behandeln möchten.
Betrachten Sie das folgende Beispiel:
import ( "encoding/json" "fmt" ) type Category struct { Name string Description string } var categories []Category jsonBlob := []byte(`[ {"Name": "A", "Description": "Monotremata"}, {"Name": "B"}, {"Name": "C", "Description": ""} ]`) err := json.Unmarshal(jsonBlob, &categories) if err != nil { fmt.Println("error:", err) } fmt.Printf("%+v", categories)
In diesem Beispiel ist das Beschreibungsfeld der Kategorie B leer, während Das Beschreibungsfeld der Kategorie C ist im JSON nicht angegeben. Die Ausgabe lautet:
[{Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:}]
Wie Sie sehen, ist es nicht möglich, zwischen diesen beiden Fällen zu unterscheiden.
Lösung
Sie können Unterscheiden Sie zwischen leeren und fehlenden Werten, indem Sie den Feldtyp in einen Zeiger ändern. Wenn der Wert in JSON mit einem leeren Stringwert vorhanden ist, wird er auf einen Zeiger gesetzt, der auf einen leeren String zeigt. Wenn es in JSON nicht vorhanden ist, bleibt es Null.
type Category struct { Name string Description *string }
Mit dieser Änderung wird die Ausgabe wie folgt:
[{Name:A Description:0x1050c150} {Name:B Description:<nil>} {Name:C Description:0x1050c158}]
Jetzt können Sie den Nullwert zur Identifizierung verwenden fehlende Felder und behandeln Sie sie entsprechend.
Das obige ist der detaillierte Inhalt vonWie kann ich beim Unmarshaling von JSON in Go zwischen leeren und fehlenden Werten unterscheiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!