JSON Unmarshal Embedded struct Exploration
Beim Versuch, ein JSON-Objekt in eine Struktur mit einem eingebetteten Feld zu entmarshalieren, kann es zu unerwartetem Verhalten kommen. Um dies zu veranschaulichen, betrachten Sie die folgenden Strukturdefinitionen:
<code class="go">type Outer struct { Inner Num int } type Inner struct { Data string } func (i *Inner) UnmarshalJSON(data []byte) error { i.Data = string(data) return nil }</code>
Das Unmarshallen eines JSON-Objekts in eine Instanz von Outer mit json.Unmarshal(data, &Outer{}) führt dazu, dass nur das Inner-Feld ausgefüllt wird, während das Das Num-Feld bleibt unberührt. Dies kann auf die Art und Weise zurückgeführt werden, wie JSON eingebettete Felder unmarshallt.
Um dieses Problem zu beheben, wird empfohlen, das eingebettete Feld zu einem expliziten Feld in der übergeordneten Struktur zu machen. Durch diese Änderung kann der JSON-Unmarshaler direkt auf das Feld zugreifen und es entmarshalieren. Hier ist die korrigierte Strukturdefinition:
<code class="go">Outer struct { I Inner // make Inner an explicit field Num int `json:"Num"` }</code>
In dieser aktualisierten Version wird das innere Feld zu einem expliziten Feld mit dem Namen I gemacht. Darüber hinaus ist das Num-Feld mit json:"Num" getaggt, um sicherzustellen, dass der JSON-Schlüssel „Num“ wird beim Unmarshalling diesem Feld zugeordnet.
Durch die Übernahme dieses Ansatzes werden sowohl das I- als auch das Num-Feld beim Unmarshalling eines JSON korrekt ausgefüllt Objekt in eine Instanz von Outer.
Das obige ist der detaillierte Inhalt vonWarum führt das JSON-Unmarshaling eingebetteter Strukturen zu unerwartetem Verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!