Reduzierung der sql.NullString-Ausgabe während des JSON-Marshallings
Beim Marshalling einer Go-Struktur, die ein sql.NullString-Feld enthält, umfasst die Standardausgabe die Felder Gültige und String-Eigenschaften. Um eine abgeflachte Ausgabe zu erhalten, die nur den Wert enthält, müssen Sie zusätzliche Schritte unternehmen.
Bedenken Sie die folgende Struktur:
type Company struct { ID int `json:"id"` Abn sql.NullString `json:"abn,string"` }
Das Marshallen dieser Struktur mit json.Marshal erzeugt eine Ausgabe, die wie folgt aussieht :
{ "id": "68", "abn": { "String": "SomeABN", "Valid": true } }
sql.NullString für benutzerdefiniertes JSON erweitern Marshalling
Um diese Ausgabe zu reduzieren, müssen Sie sql.NullString erweitern und json.Marshaler implementieren.
type NullString sql.NullString func (x *NullString) MarshalJSON() ([]byte, error) { if !x.Valid { x.Valid = true x.String = "" //return []byte("null"), nil } return json.Marshal(x.String) }
Definieren Sie einen benutzerdefinierten Typ für die reduzierte Ausgabe
Als nächstes definieren Sie einen benutzerdefinierten Typ, der den erweiterten NullString einbettet und implementiert json.Marshaler.
type MyNullString struct { 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"` }
Durch die Verwendung dieses benutzerdefinierten Typs wird die gemarshallte Ausgabe zu:
{ "id": "68", "abn": "SomeABN" }
Das obige ist der detaillierte Inhalt vonWie kann die sql.NullString-Ausgabe beim Marshaling von JSON in Go reduziert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!