Maison >développement back-end >Golang >Comment aplatir la sortie JSON sql.NullString dans Go ?
Marshaling personnalisé pour la sortie sql.NullString aplatie
Lors du marshalling d'un champ sql.NullString dans une structure Go à l'aide de json.Marshal, la valeur par défaut la sortie inclut des métadonnées supplémentaires telles que les champs Valide et Chaîne. Ce comportement peut ne pas être souhaité dans certains scénarios où la valeur aplatie est préférée.
Considérez la structure suivante :
type Company struct { ID int `json:"id"` Abn sql.NullString `json:"abn,string"` }
Lors du marshaling de cette structure, le résultat ressemblera à ce qui suit :
{ "id": "68", "abn": { "String": "SomeABN", "Valid": true } }
Cependant, le résultat souhaité est une version aplatie avec juste le value :
{ "id": "68", "abn": "SomeABN" }
Implémentation de Marshaller personnalisée
Pour y parvenir, il est nécessaire d'implémenter un type personnalisé qui embarque sql.NullString et implémente l'interface json.Marshaler . Ce type personnalisé peut définir son propre comportement de marshalling via la méthode MarshalJSON.
Voici un exemple :
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 utilisant le type MyNullString personnalisé, le marshalling produira désormais le résultat aplati souhaité :
company := &Company{} company.ID = 68 company.Abn.String = "SomeABN" result, err := json.Marshal(company)
{ "id": "68", "abn": "SomeABN" }
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!