Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Meratakan Output sql.NullString Apabila Marshaling JSON dalam Go?

Bagaimana untuk Meratakan Output sql.NullString Apabila Marshaling JSON dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-11-30 02:18:10326semak imbas

How to Flatten sql.NullString Output When Marshaling JSON in Go?

Meratakan sql.NullString Output Semasa JSON Marshaling

Apabila menyusun struct Go yang mengandungi medan sql.NullString, output lalai termasuk medan Sifat sah dan String. Untuk mencapai output diratakan yang hanya merangkumi nilai, anda mesti mengambil langkah tambahan.

Pertimbangkan struct berikut:

type Company struct {
    ID   int             `json:"id"`              
    Abn  sql.NullString  `json:"abn,string"`
}

Marshalling struct ini dengan json.Marshal menghasilkan output yang kelihatan seperti :

{
    "id": "68",
    "abn": {
        "String": "SomeABN",
        "Valid": true
    }
}

Lanjutkan sql.NullString untuk JSON Tersuai Marshaling

Untuk meratakan output ini, anda mesti melanjutkan sql.NullString dan melaksanakan json.Marshaler.

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)
}

Tentukan Jenis Tersuai untuk Output Diratakan

Seterusnya, tentukan jenis tersuai yang membenamkan NullString dan melaksanakan 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"`
}

Dengan menggunakan jenis tersuai ini, output tersusun menjadi:

{
    "id": "68",
    "abn": "SomeABN"
}

Atas ialah kandungan terperinci Bagaimana untuk Meratakan Output sql.NullString Apabila Marshaling JSON dalam 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