Étant donné une structure Golang avec un champ sql.NullString, le comportement de marshaling par défaut entraîne une sortie où le champ est imbriqué dans un objet JSON avec des clés String et Valid. Pour obtenir une sortie aplatie contenant uniquement la valeur de NullString, suivez ces étapes :
1. Définir un type personnalisé :
Créez un type personnalisé qui intègre sql.NullString et implémente l'interface json.Marshaler.
type MyNullString struct { sql.NullString }
2. Implémentez la méthode MarshalJSON :
Dans MyNullString, implémentez la méthode MarshalJSON pour fournir un comportement de marshalling JSON personnalisé.
func (s MyNullString) MarshalJSON() ([]byte, error) { if s.Valid { return json.Marshal(s.String) } return []byte(`null`), nil }
3. Modifier la structure :
Utilisez le type MyNullString personnalisé pour le champ de la structure qui nécessite un aplatissement.
type Company struct { ID int `json:"id"` Abn MyNullString `json:"abn,string"` }
Exemple :
package main import ( "database/sql" "encoding/json" "log" ) 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"` } func main() { company := Company{ ID: 68, Abn: MyNullString{String: "SomeABN", Valid: true}, } result, err := json.Marshal(company) if err != nil { log.Fatal(err) } // Output: {"id":68,"abn":"SomeABN"} log.Println(string(result)) }
En suivant ces étapes, vous pouvez aplatir efficacement la sortie des champs sql.NullString et obtenir uniquement la valeur dans votre JSON marshallé.
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!