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 }
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"` }
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 }
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"` }
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!