Maison  >  Article  >  développement back-end  >  Quand « json.Unmarshal » renvoie-t-il une erreur dans Go ?

Quand « json.Unmarshal » renvoie-t-il une erreur dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-10 11:00:03435parcourir

When Does `json.Unmarshal` Return an Error in Go?

Quand JSON Unmarshal to Structure renvoie-t-il une erreur dans Go ?

Dans Go, la fonction json.Unmarshal tente de décoder le format JSON octets dans une structure de données cible. Bien qu'il analyse et remplisse avec succès les champs avec des noms correspondants dans le JSON source, il ne génère pas d'erreur lorsque les valeurs ne correspondent pas à la structure de la cible.

Cependant, json.Unmarshal rencontrera des erreurs dans les situations suivantes :

Erreur de syntaxe :

Si l'entrée JSON est syntaxiquement incorrecte, json.Unmarshal renverra une erreur. Par exemple, s'il manque un guillemet requis, le décodeur ne parviendra pas à analyser le JSON.

type A struct {
    Name string `json:"name"`
}
data := []byte(`{"name":what?}`)
err := json.Unmarshal(data, &a)
fmt.Println(err)  // prints character 'w' looking for beginning of value

Valeur JSON non représentable par type de cible :

Si le type d'une valeur JSON ne peut pas être converti en type du champ correspondant dans la structure cible, json.Unmarshal renverra une erreur. Par exemple, si un booléen JSON tente d'être attribué à un champ de chaîne :

data := []byte(`{"name":false}`)
type B struct {
  Name string `json:"name"`
}
var b B
err = json.Unmarshal(data, &b)
fmt.Println(err) // prints cannot unmarshal bool into Go value of type string

Autres détails d'implémentation :

Mis à part les erreurs syntaxiques et de conversion de type, json.Unmarshal peut également renvoyer des erreurs dans d'autres situations inhabituelles. Référez-vous à la documentation Go pour une liste plus exhaustive.

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