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

Comment puis-je faire la distinction entre les champs JSON nuls et manquants lors du démarshalage dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-03 21:03:17
original
454 Les gens l'ont consulté

How Can I Distinguish Between JSON Null and Missing Fields When Unmarshaling in Go?

Distinguer les champs JSON définis sur Null et non présents lors du démarshalage

Lors du démarshalage de JSON dans une structure Golang, différenciation entre les champs définis sur null et les champs qui ne sont pas présents peuvent être cruciaux. Les deux scénarios aboutissent à des valeurs nulles dans la structure, obscurcissant la sémantique prévue.

Différenciation à l'aide de génériques (Go 1.18)

Go 1.18 introduit des génériques, permettant une solution concise avec un seul type générique :

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

Ce type encapsule le concept d'une valeur facultative avec un état de champ défini (Défini).

Exemple d'utilisation :

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

Après le démarshaling, les champs avec des valeurs définies (Défini == true) peut faire la distinction entre les valeurs nulles (Value == nil) et les valeurs manquantes (Defined == false).

Solutions pré-génériques

Wrapper de type personnalisé :

type OptionalString struct {
    Defined bool
    Value   *string
}

func (os *OptionalString) UnmarshalJSON(data []byte) error {
    os.Defined = true
    return json.Unmarshal(data, &os.Value)
}
Copier après la connexion

Exemple Utilisation :

type Payload struct {
    Field1 string         `json:"field1"`
    Field2 OptionalString `json:"field2"`
}
Copier après la connexion

Limitations :

  • Nécessite un wrapper de structure dédié pour chaque type pris en charge (par exemple, OptionNumber pour les types numériques).
  • Ne fournit pas de distinction complète entre les valeurs nulles et manquantes.

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