Maison  >  Article  >  développement back-end  >  Voici quelques options de titre, axées sur le problème et la solution : **Question directe

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

Linda Hamilton
Linda Hamiltonoriginal
2024-10-25 11:43:02254parcourir

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>

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>

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!

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