Maison > développement back-end > Golang > Comment puis-je faire la différence entre les champs vides et non définis lors de la désorganisation de JSON dans Go ?

Comment puis-je faire la différence entre les champs vides et non définis lors de la désorganisation de JSON dans Go ?

Patricia Arquette
Libérer: 2024-12-12 20:32:15
original
381 Les gens l'ont consulté

How Can I Differentiate Between Empty and Undefined Fields When Unmarshaling JSON in Go?

Dévoiler le vide : reconnaître les champs non définis dans le processus de démarshalage de Go

Lors du démarshalage des données JSON dans des structures Go, distinction entre les valeurs vides et les champs non spécifiés peut être essentiel pour gérer les incohérences des données. Prenons l'exemple suivant :

var jsonBlob = []byte(`[
    {"Name": "A", "Description": "Monotremata"},
    {"Name": "B"},
    {"Name": "C", "Description": ""}
]`)

type Category struct {
    Name  string
    Description string
}

var categories []Category
err := json.Unmarshal(jsonBlob, &categories)

if err != nil {
    fmt.Println("error:", err)
}
fmt.Printf("%+v", categories)
Copier après la connexion

L'exécution de ce code produira le résultat suivant :

[
  {Name:A Description:Monotremata}
  {Name:B Description:}
  {Name:C Description:}
]
Copier après la connexion

Comme vous pouvez le voir, il est impossible de faire la différence entre un champ "Description" non défini (comme dans "Catégorie B") et un champ "Description" vide (comme dans "Catégorie C"). Cette ambiguïté peut conduire à un comportement incorrect du programme.

Solution : Utiliser des pointeurs pour distinguer

Pour surmonter ce défi, vous pouvez modifier le type de champ pour qu'il soit un pointeur. Si les données JSON contiennent une valeur de chaîne vide, un pointeur vers une chaîne vide sera créé. Cependant, si le champ n'est pas présent dans les données JSON, il restera nul.

type Category struct {
    Name        string
    Description *string
}
Copier après la connexion

Avec cette modification, la sortie mise à jour devient :

[
  {Name:A Description:0x1050c150}
  {Name:B Description:<nil>}
  {Name:C Description:0x1050c158}
]
Copier après la connexion

Maintenant, vous pouvez facilement faire la distinction entre les valeurs vides et les champs non spécifiés. Un pointeur non nul indique une valeur vide, tandis qu'un pointeur nul indique que le champ n'était pas présent dans les données JSON. Cela vous permet de gérer ces cas différemment dans votre programme, garantissant l'exactitude des données et un comportement approprié.

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