Maison  >  Article  >  développement back-end  >  Pourquoi mon champ « Num » est-il ignoré lors de la désorganisation de JSON dans une structure intégrée dans Go ?

Pourquoi mon champ « Num » est-il ignoré lors de la désorganisation de JSON dans une structure intégrée dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-04 15:03:42189parcourir

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

Désérialiser JSON vers des structures embarquées dans Go

La désérialisation des données JSON dans des structures embarquées peut présenter des défis dans Golang. Prenons l'exemple struct :

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

type Inner struct {
    Data string
}</code>

Lors de l'utilisation de json.Unmarshal(data, &Outer{}), seul le champ Inner n'est pas marshalé, ignorant le champ Num. Pour comprendre pourquoi cela se produit, il est important de noter qu'Inner est intégré dans Outer.

Pendant le démarshalage JSON, la bibliothèque appelle le démarshaler sur Outer, qui à son tour appelle le démarshaler sur Inner. Par conséquent, la fonction Inner.UnmarshalJSON reçoit l'intégralité de la chaîne JSON, qu'elle traite pour Inner uniquement.

Pour résoudre ce problème, faites d'Inner un champ explicite dans Outer. Cela garantit que lors du démarshaling JSON, le champ Inner est correctement démarshalé et que le champ Num est défini en fonction des données JSON :

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

Cette modification permet le démarshaling correct des données JSON dans la structure externe, y compris les champs Intérieur et Numérique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn