Maison > développement back-end > Golang > le corps du texte

Pourquoi est-ce que j'obtiens une erreur « interface conversion : interface {} is map[string]interface {}, not main.Data » lors de la désérialisation JSON ?

Linda Hamilton
Libérer: 2024-11-14 12:33:02
original
973 Les gens l'ont consulté

Why am I getting an

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

Lorsque vous tentez de désérialiser des structures de données complexes à partir de JSON, il est crucial d'assurer une gestion appropriée des interfaces pour éviter erreurs d'exécution. Considérez le code suivant :

type Data struct {
    Content string
    Links   []string
}

func main() {
    anInterface := interface{}{/* JSON data here */}

    // Assertion to Data interface
    AData2 := anInterface.(Data)
}
Copier après la connexion

Lors de l'exécution, le programme renvoie une erreur :

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

Comprendre le problème

L'erreur provient de la tentative d'assertion d'une interface contenant une carte de paires chaîne-interface directement dans une structure Data. Go s'attend à ce que l'interface contienne une valeur Data, mais le contenu réel est une carte.

Solution

Pour résoudre ce problème, il est essentiel de comprendre la nature des interfaces . Une interface est simplement un contrat qui définit un ensemble de méthodes qu'un type doit implémenter. Pour affirmer une interface sur un type spécifique, l'interface doit avoir été préalablement renseignée avec la valeur de ce type.

Dans ce cas, les modifications suivantes doivent être apportées :

  1. Remplir l'interface avec une valeur Data :
anInterface = Data{Content: "hello world", Links: []string{"link1", "link2", "link3"}}
Copier après la connexion
  1. Assertez l'interface sur Data :
AData2 = anInterface.(Data)
Copier après la connexion

Cela garantit que l'interface contient le type correct avant de tenter de convertissez-le en données.

Approche alternative

Une autre approche consiste à désassembler directement les données JSON dans la structure de données souhaitée :

var AData2 Data

err := json.Unmarshal([]byte(jsonStr), &AData2)
if err != nil {
    panic(err)
}
Copier après la connexion

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