Heim >Backend-Entwicklung >Golang >Wie gehe ich mit SQL-NULL-Werten in JSON mithilfe von Go-Typkonvertierungen um?

Wie gehe ich mit SQL-NULL-Werten in JSON mithilfe von Go-Typkonvertierungen um?

Susan Sarandon
Susan SarandonOriginal
2024-12-22 01:31:18316Durchsuche

How to Handle SQL NULL Values in JSON using Go Type Conversions?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn