Dans des scénarios d'encodage JSON complexes, on peut rencontrer des situations où les structures vides imbriquées sont également codées alors qu'elles doivent être omises pour des raisons d'espace et d'efficacité. Par exemple, considérons l'extrait de code suivant :
type ColorGroup struct { ID int `json:",omitempty"` Name string Colors []string } type Total struct { A ColorGroup `json:",omitempty"` B string `json:",omitempty"` }
Lorsque json.Marshal est utilisé sur une instance de Total avec un champ A vide, il apparaît toujours dans le JSON de sortie :
group := Total{ A: ColorGroup{}, // An empty ColorGroup instance } json.Marshal(group) // Output: {"A":{"Name":"","Colors":null},"B":null}
Le résultat souhaité est d'omettre complètement le champ A :
{"B":null}
La clé pour résoudre ce problème réside dans l'utilisation de pointeurs. Si le champ A dans Total est déclaré comme pointeur, il sera automatiquement défini sur nul lorsqu'il n'est pas explicitement attribué, résolvant le problème de l'encodage de structure vide :
type ColorGroup struct { ID int `json:",omitempty"` Name string Colors []string } type Total struct { A *ColorGroup `json:",omitempty"` // Using a pointer to ColorGroup B string `json:",omitempty"` }
Avec cette modification, la sortie json.Marshal omettra désormais correctement le champ A vide :
group := Total{ B: "abc", // Assigning a value to the B field } json.Marshal(group) // Output: {"B":"abc"}
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!