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

Voici quelques options de titre, axées sur le problème et la solution : **Question directe

Linda Hamilton
Libérer: 2024-10-25 11:43:02
original
328 Les gens l'ont consulté

Here are a few title options, focusing on the problem and solution:

**Direct Question

Décodage JSON en Structs vs. Maps

Dans le scénario décrit, une application reçoit une interface{} contenant une structure qui correspond au JSON structure reçue sous forme de tableau d’octets. Cependant, lors du décodage JSON, le résultat est une carte au lieu de la structure attendue.

Ce comportement est dû à la façon dont json.Unmarshal gère les pointeurs. En faisant référence à une interface{} qui contenait à l'origine la structure, le processus de décodage est incapable de déterminer le type sous-jacent. En conséquence, il renvoie une simple carte au lieu de la structure souhaitée.

Pour remédier à ce problème, deux approches peuvent être envisagées :

1. Casting d'interface directe :

Passez un pointeur vers la structure directement à json.Unmarshal en tant qu'interface abstraite :

<code class="go">var ping interface{} = &Ping{}
deserialize([]byte(`{"id":42}`), ping)</code>
Copier après la connexion

2. Création de pointeur basé sur la réflexion :

Si un pointeur direct vers la structure n'est pas disponible, utilisez la réflexion pour créer un nouveau pointeur, désérialisez-le et recopiez la valeur :

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

En adoptant l'une ou l'autre de ces approches, le processus de décodage peut identifier correctement la structure sous-jacente et remplir ses champs à partir des données JSON.

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