Maison > développement back-end > Golang > Pourquoi ma désérialisation JSON génère-t-elle un échec d'assertion d'interface ?

Pourquoi ma désérialisation JSON génère-t-elle un échec d'assertion d'interface ?

Mary-Kate Olsen
Libérer: 2024-11-27 06:41:09
original
399 Les gens l'ont consulté

Why Does My JSON Deserialization Throw an Interface Assertion Failure?

Échec de l'assertion d'interface lors de la désérialisation JSON

Problème :

Lors de la tentative d'assertion d'une interface à un type de structure spécifique après lors de la désérialisation à partir de JSON, une erreur est générée indiquant que l'interface n'est pas celle attendue tapez.

Erreur spécifique :

panic: interface conversion: interface {} is map[string]interface {}, not main.Data
Copier après la connexion

Détails :

Le code tente de désérialiser les données JSON dans une interface puis affirmez l’interface avec une structure Data. Cependant, au moment de l'exécution, Go s'attend à ce que l'interface soit une map[string]interface{} au lieu d'un objet Data.

Solution :

Assertion d'interface appropriée :

Les interfaces ne peuvent être attribuées à aucun type de structure arbitraire. Ils doivent être affirmés avec le type correct représenté par l'interface. Dans ce cas, l'interface ne peut être affirmée à une structure Data que si une valeur de ce type lui a d'abord été attribuée.

Démarshaling direct :

Pour éviter le besoin d'assertions d'interface, il est Il est recommandé de désorganiser directement les données JSON dans le type de structure souhaité. Cela garantit que les données sont correctement converties sans avoir besoin d'assertions intermédiaires.

Exemple de code :

type Data struct {
    Content string
    Links   []string
}

func main() {
    var AData Data

    // Deserialize JSON directly into the Data struct
    err = json.Unmarshal([]byte(value), &AData)
    if err != nil {
        panic(err)
    }
}
Copier après la connexion

En décomposant directement les données JSON dans la structure AData, le besoin d'assertions d'interface est éliminé, garantissant une conversion correcte des données.

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