Heim  >  Artikel  >  Backend-Entwicklung  >  Warum wird mein „Num“-Feld beim Unmarshalling von JSON in eine eingebettete Struktur in Go ignoriert?

Warum wird mein „Num“-Feld beim Unmarshalling von JSON in eine eingebettete Struktur in Go ignoriert?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 15:03:42192Durchsuche

Why is my `Num` field ignored when unmarshalling JSON to an embedded struct in Go?

Unmarshalling von JSON in eingebettete Strukturen in Go

Deserialisierung von JSON-Daten in eingebettete Strukturen kann in Golang eine Herausforderung darstellen. Nehmen Sie die Beispielstruktur:

<code class="go">type Outer struct {
    Inner
    Num int
}

type Inner struct {
    Data string
}</code>

Bei Verwendung von json.Unmarshal(data, &Outer{}) wird nur das Inner-Feld entmarshallt und das Num-Feld ignoriert. Um zu verstehen, warum dies geschieht, ist es wichtig zu beachten, dass Inner in Outer eingebettet ist.

Während des JSON-Unmarshalings ruft die Bibliothek den Unmarshaler auf Outer auf, der wiederum den Unmarshaler auf Inner aufruft. Folglich empfängt die Inner.UnmarshalJSON-Funktion die gesamte JSON-Zeichenfolge, die sie nur für Inner verarbeitet.

Um dieses Problem zu beheben, machen Sie Inner zu einem expliziten Feld in Outer. Dadurch wird sichergestellt, dass beim JSON-Unmarshaling das innere Feld ordnungsgemäß entmarshaled wird und das Num-Feld basierend auf den JSON-Daten festgelegt wird:

<code class="go">Outer struct {
    I Inner // Make Inner an explicit field
    Num int `json:"Num"`
}</code>

Diese Änderung ermöglicht das korrekte Unmarshaling von JSON-Daten in die äußere Struktur, einschließlich Sowohl das Innere als auch das Num-Feld.

Das obige ist der detaillierte Inhalt vonWarum wird mein „Num“-Feld beim Unmarshalling von JSON in eine eingebettete Struktur in Go ignoriert?. 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