Heim >Backend-Entwicklung >Golang >Wie gehe ich mit SQL-NULL-Werten in JSON mithilfe von Go-Typkonvertierungen um?
JSON-Behandlung von SQL-NULL-Werten mit Go-Typkonvertierungen
Während Go-Typen wie Int64 und String keine Nullwerte speichern können, verwenden Sie sql.NullInt64 und sql.NullString ermöglicht diese Funktion. Die Codierung dieser Typen als JSON mithilfe des JSON-Pakets führt jedoch zu einem veränderten Format im Vergleich zu regulären Int64- und String-Typen.
Diese Diskrepanz entsteht, weil sql.Null*-Typen selbst Strukturen sind, was dazu führt eine zusätzliche Verschachtelungsebene in der JSON-Darstellung. Um dies zu umgehen, kann man benutzerdefinierte Typen implementieren, die den Schnittstellen json.Marshaller und json.Unmarshaler entsprechen.
Zum Beispiel kann der Typ JsonNullInt64 definiert werden, indem der Typ sql.NullInt64 eingebettet und eine benutzerdefinierte JSON-Behandlung implementiert wird:
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 { // Pointer unmarshalling ensures NULL detection 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 }
Ersetzen von sql.NullInt64 durch JsonNullInt64 führt zur gewünschten JSON-Kodierung. Weitere Tests finden Sie auf diesem Spielplatz: http://play.golang.org/p/zFESxLcd-c
Das obige ist der detaillierte Inhalt vonWie gehe ich mit SQL-NULL-Werten in JSON mithilfe von Go-Typkonvertierungen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!