Maison > Article > développement back-end > Pourquoi ma désérialisation JSON entraîne-t-elle un échec d'assertion d'interface ?
Échec de l'assertion d'interface dans la désérialisation JSON
Dans cette situation, le problème survient lors de la tentative d'assertion d'une interface dans un type de structure spécifique après la désérialisation Données JSON. Le message d'erreur indique que le type d'objet attendu est une map[string]interface{}, mais que l'objet réel est une structure personnalisée de type Data.
Explication
Les assertions d'interface permettent la conversion d'une valeur d'interface en un type spécifique. Cependant, il est crucial de s'assurer que la valeur sous-jacente de l'interface correspond réellement au type cible. Dans ce cas, les données d'interface contiennent un objet complexe avec des champs imbriqués, tandis que main.Data est une structure simple. Par conséquent, l'assertion dans le type Data n'est pas valide.
Solution
Pour résoudre ce problème, l'approche consiste soit à s'assurer que les données de l'interface correspondent à la structure cible, soit à vérifiez dynamiquement le type de données avant d'effectuer l'assertion.
Désérialisation directe
Pour la désérialisation directe, vous pouvez utiliser l'approche suivante :
var result Data err := json.Unmarshal(data, &result) if err != nil { // Handle error }
Cette méthode désérialise directement les données JSON dans la structure Data, éliminant ainsi le besoin d'assertions d'interface.
Vérification et assertion d'interface
Alternativement, si vous devez effectuer une assertion d'interface, vous devez d'abord vous assurer que la valeur sous-jacente est du type correct :
result, ok := anInterface.(Data) if !ok { // Handle type mismatch error }
Cette vérification garantit que seules les conversions de type valides sont effectuées, évitant ainsi les erreurs d'exécution.
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!