Maison > développement back-end > Golang > Comment puis-je faire la différence entre les champs JSON nuls et manquants dans Go ?

Comment puis-je faire la différence entre les champs JSON nuls et manquants dans Go ?

Barbara Streisand
Libérer: 2024-11-30 19:35:12
original
411 Les gens l'ont consulté

How Can I Differentiate Between Null and Missing JSON Fields in Go?

Différenciation des champs JSON nuls et inexistants dans Go

Lors de la désorganisation de JSON dans des structures Go, il peut être difficile de faire la distinction entre les champs JSON qui sont explicitement définis sur null et ceux qui ne sont tout simplement pas présents dans la charge utile JSON. Cette distinction est cruciale dans de nombreux scénarios, car elle affecte la sémantique des données et leur interprétation.

Solution Go 1.18

À partir de Go 1.18, une structure facultative générique peut être utilisé pour résoudre ce problème :

type Optional[T any] struct {
    Defined bool
    Value   *T
}
Copier après la connexion

Cette structure implémente l'interface UnmarshalJSON, permettant pour distinguer les valeurs définies et indéfinies. Lors de la désorganisation d'une charge utile JSON, le champ défini de la structure facultative sera défini sur true, que la valeur soit nulle ou valide.

Exemple d'utilisation

type Payload struct {
    Field1 Optional[string] `json:"field1"`
    Field2 Optional[bool]   `json:"field2"`
    Field3 Optional[int32]  `json:"field3"`
}
Copier après la connexion

Après avoir désorganisé une charge utile JSON, le champ Défini peut être utilisé pour déterminer si un champ spécifique était présent dans le JSON ou non.

Solution Pre-Go 1.18

Pour les versions de Go antérieures à 1.18, un type personnalisé peut être créé pour obtenir le même résultat.

type OptionalString struct {
    Defined bool
    Value   *string
}
Copier après la connexion

Similaire à la structure facultative de Go 1.18, ce type implémente l'interface UnmarshalJSON pour définir la valeur définie. champ en conséquence.

Exemple d'utilisation

type Payload struct {
    SomeField1 string         `json:"somefield1"`
    SomeField2 OptionalString `json:"somefield2"`
}
Copier après la connexion

En utilisant ce type personnalisé, le champ défini peut être inspecté pour différencier les champs nuls et inexistants.

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