Maison > développement back-end > Golang > le corps du texte

## Pourquoi `json.Unmarshal` renvoie-t-il une carte au lieu d'une structure lors du démarshaling dans une interface{} ?

Susan Sarandon
Libérer: 2024-10-26 06:24:02
original
264 Les gens l'ont consulté

## Why does `json.Unmarshal` return a map instead of a struct when unmarshaling into an interface{}?

Type de retour anormal de l'interface de marshaling avec JSON

Dans les scénarios où json.Unmarshal est utilisé pour convertir un tableau d'octets en une interface{}, un résultat inattendu peut survenir lorsqu'une carte est renvoyée au lieu du type de structure prévu. Cet écart peut être attribué à la nature abstraite du type interface{}, laissant le package json incapable de discerner la structure struct sous-jacente.

Pour rectifier cette anomalie, il est recommandé de passer explicitement un pointeur vers le type souhaité. struct, en le transformant en interface abstraite. Cette approche permet au package json de reconnaître et de désérialiser la structure en conséquence.

Par exemple, l'extrait de code modifié suivant illustre le comportement souhaité :

<code class="go">func bad() {
    var ping interface{} = &Ping{} // Pass a pointer to Ping as an interface
    deserialize([]byte(`{"id":42}`), ping)
    fmt.Println("DONE:", ping) // Now outputs a Ping struct
}</code>
Copier après la connexion

Alternativement, si l'accès à un pointeur est n'est pas réalisable, l'allocation dynamique peut être utilisée pour créer un nouveau pointeur pouvant être désérialisé. La valeur originale de l'interface{} peut ensuite être mise à jour avec la nouvelle valeur.

<code class="go">func bad() {
    var ping interface{} = Ping{}
    nptr := reflect.New(reflect.TypeOf(ping))
    deserialize([]byte(`{"id":42}`), nptr.Interface())
    ping = nptr.Interface()
    fmt.Println("DONE:", ping) // Outputs a Ping struct
}</code>
Copier après la connexion

En employant l'une de ces techniques, la fonction json.Unmarshal peut désérialiser avec précision le tableau d'octets dans le type de structure souhaité, éliminant ainsi le valeur de retour de carte inattendue.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!