Gestion des structures vides imbriquées dans le marshaling JSON dans Go
Introduction
Lors de l'utilisation de l'encodage /json dans Go pour le marshalling des structures vers JSON, la balise ",omitempty" peut être utilisée pour exclure les champs vides du JSON résultant. Cependant, cette balise peut ne pas se comporter comme prévu pour les structures imbriquées.
Question
Considérez l'exemple suivant :
type ColorGroup struct { ID int `json:",omitempty"` Name string Colors []string } type Total struct { A ColorGroup `json:",omitempty"` B string `json:",omitempty"` } group := Total{ A: ColorGroup{}, } json.Marshal(group)
Dans ce scénario, la sortie JSON ne doit inclure que le champ B, puisque le champ A est vide. Cependant, la sortie inclut toujours le champ A avec des valeurs vides ({"A": {"Name": "", "Colors": null}, "B": null}).
Réponse
La documentation sur le marshaling JSON dans Go indique que les champs de structure sont considérés comme vides s'ils sont :
Dans l'exemple fourni, group.A est une structure vide, pas un pointeur nul ou un type de collection (par exemple, slice , carte). Par conséquent, il n'est pas traité comme une valeur vide par le marshaleur.
Pour obtenir le comportement souhaité, on peut utiliser un pointeur vers la structure imbriquée :
type ColorGroup struct { ID int `json:",omitempty"` Name string Colors []string } type Total struct { A *ColorGroup `json:",omitempty"` B string `json:",omitempty"` } group := Total{ B: "abc", } json.Marshal(group)
Avec cette modification, le JSON la sortie inclura uniquement le champ B : {"B": "abc"}.
Remarque :
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!