Maison  >  Article  >  développement back-end  >  Pourquoi ma désérialisation JSON entraîne-t-elle un échec d'assertion d'interface ?

Pourquoi ma désérialisation JSON entraîne-t-elle un échec d'assertion d'interface ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-15 07:34:02428parcourir

Why Does My JSON Deserialization Result in an Interface Assertion Failure?

É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!

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