Maison >développement back-end >Golang >Comment aplatir la sortie JSON d'une structure Go contenant sql.NullString ?
Étant donné une structure Go contenant un sql.NullString, le marshaling de la structure à l'aide de encoding/json produit un objet imbriqué au lieu de l'objet aplati souhaité valeur.
type Company struct { ID int `json:"id"` Abn sql.NullString `json:"abn,string"` }
Par exemple, le marshaling d'une telle structure donne un résultat comme :
{ "id": "68", "abn": { "String": "SomeABN", "Valid": true } }
Cependant, le résultat souhaité est aplati :
{ "id": "68", "abn": "SomeABN" }
La personnalisation de la méthode MarshalJSON pour le type NullString en définissant un nouveau type permet une gestion plus contrôlée sortie.
type MyNullString struct { sql.NullString } func (s MyNullString) MarshalJSON() ([]byte, error) { if s.Valid { return json.Marshal(s.String) } return []byte(`null`), nil } type Company struct { ID int `json:"id"` Abn MyNullString `json:"abn,string"` }
En implémentant l'interface json.Marshaler, le type MyNullString peut contrôler la façon dont il est représenté en JSON. Lorsqu'il n'est pas nul, il renvoie la chaîne sous-jacente et pour les valeurs nulles, il renvoie une chaîne littérale « nulle ».
L'exemple fourni dans le terrain de jeu du code démontre le comportement souhaité :
https://play.golang.org/p/Ak_D6QgIzLb
Cette solution aplatit la sortie en ignorant le champ Valide et en renvoyant directement la valeur de chaîne.
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!