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

Comment puis-je faire la différence entre les champs vides et non spécifiés lors du déclassement de JSON dans Go ?

Patricia Arquette
Libérer: 2024-12-09 02:35:10
original
552 Les gens l'ont consulté

How Can I Differentiate Between Void and Unspecified Fields When Unmarshaling JSON in Go?

Reconnaître les champs vides et non spécifiés lors du démarshaling JSON dans Go

Dans JSON, il peut être difficile de faire la différence entre les valeurs vides et les champs non spécifiés lorsque désassembler les données dans des structures Go.

Par exemple, considérons ce qui suit JSON :

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

Si nous définissons une structure Go comme celle-ci :

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

et dégroupons le JSON dans une tranche d'instances de catégorie, nous obtenons le résultat suivant :

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

Remarquez que le champ Description de B est une chaîne vide, tandis que le champ Description de C est complètement omis du JSON. Dans les deux cas, le champ Description est défini sur une chaîne vide dans la représentation Go.

Pour différencier ces cas, une approche consiste à utiliser des pointeurs pour les champs facultatifs. En changeant le type de Description en pointeur, nous pouvons faire la distinction entre une valeur de chaîne vide et une valeur nulle (indiquant un champ non spécifié) :

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

Lorsque nous désorganisons le JSON dans cette structure modifiée, nous obtenons le résultat suivant :

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

Comme vous pouvez le voir, le champ Description de B est désormais nul, tandis que le champ Description de C est un pointeur vers une chaîne vide (indiqué par l'adresse mémoire hexadécimale). Cela nous permet d'identifier les champs non spécifiés et de les gérer en conséquence dans notre programme.

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