Warum führt das JSON-Unmarshaling eingebetteter Strukturen zu unerwartetem Verhalten?

Linda Hamilton
Freigeben: 2024-11-07 03:12:02
Original
694 Leute haben es durchsucht

Why does JSON Unmarshaling of Embedded Structs Lead to Unexpected Behavior?

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

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

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!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!