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!