Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengendalikan Nilai SQL NULL dalam JSON menggunakan Penukaran Jenis Go?

Bagaimana untuk Mengendalikan Nilai SQL NULL dalam JSON menggunakan Penukaran Jenis Go?

Susan Sarandon
Susan Sarandonasal
2024-12-22 01:31:18316semak imbas

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

JSON Pengendalian Nilai NULL SQL dengan Penukaran Jenis Go

Sementara jenis Go seperti Int64 dan String tidak boleh menyimpan nilai nol, menggunakan sql.NullInt64 dan sql.NullString membenarkan keupayaan ini. Walau bagaimanapun, pengekodan jenis ini sebagai JSON menggunakan pakej json menghasilkan format yang diubah berbanding jenis Int64 dan String biasa.

Percanggahan ini timbul kerana jenis sql.Null* adalah struct sendiri, menyebabkan tahap tambahan bersarang dalam perwakilan JSON. Untuk mengatasinya, seseorang boleh melaksanakan jenis tersuai yang mematuhi antara muka json.Marshaller dan json.Unmarshaler.

Sebagai contoh, jenis JsonNullInt64 boleh ditakrifkan, membenamkan jenis sql.NullInt64 dan melaksanakan pengendalian JSON tersuai:

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
}

Menggantikan sql.NullInt64 dengan JsonNullInt64 menghasilkan pengekodan JSON yang dikehendaki. Untuk ujian lanjut, rujuk taman permainan ini: http://play.golang.org/p/zFESxLcd-c

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Nilai SQL NULL dalam JSON menggunakan Penukaran Jenis Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn