JSON-Behandlung von SQL-NULL-Werten in Go
Beim Arbeiten mit nullbaren SQL-Datentypen in Go werden häufig die sql.Nullxxx-Typen verwendet um Nullwerte zuzulassen. Dies kann jedoch zu Formatierungsproblemen führen, wenn solche Strukturen mithilfe des JSON-Pakets in JSON kodiert werden.
Standardmäßig werden sql.Nullxxx-Typen aufgrund ihrer Strukturnatur als Objekte mit einer zusätzlichen Ebene gemarshallt. Dies kann zu einer unerwünschten JSON-Ausgabe führen. Um dieses Problem zu beheben, sollten Sie die Implementierung der Schnittstellen json.Marshaller und json.Unmarshaler für einen benutzerdefinierten Typ in Betracht ziehen, der den Typ sql.Nullxxx einbettet.
Zum Beispiel kann der folgende Typ JsonNullInt64 zum Codieren von sql.NullInt64-Werten als verwendet werden null oder ganze Zahlen:
type JsonNullInt64 struct { sql.NullInt64 } func (v JsonNullInt64) MarshalJSON() ([]byte, error) { if v.Valid { return json.Marshal(v.Int64) } else { return json.Marshal(nil) } } func (v *JsonNullInt64) UnmarshalJSON(data []byte) error { var x *int64 if err := json.Unmarshal(data, &x); err != nil { return err } if x != nil { v.Valid = true v.Int64 = *x } else { v.Valid = false } return nil }
Bei Verwendung des Typs JsonNullInt64 ist es wird in der erwarteten Weise codiert, was eine ordnungsgemäße JSON-Darstellung ohne die zusätzliche Ebene ermöglicht.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit SQL-NULL-Werten im Go JSON Marshalling um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!