Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Meratakan Output JSON daripada struct Go yang mengandungi sql.NullString?

Bagaimana untuk Meratakan Output JSON daripada struct Go yang mengandungi sql.NullString?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-02 19:20:13572semak imbas

How to Flatten JSON Output from a Go struct containing sql.NullString?

Marshaling sql.NullString for Flattened Output

Masalah

Memandangkan struct Go yang mengandungi sql.NullString, menyusun struct menggunakan pengekodan/json produces objek bersarang bukannya diratakan yang dikehendaki nilai.

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

Sebagai contoh, menyusun struktur sedemikian menghasilkan output seperti:

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

Walau bagaimanapun, output yang dikehendaki diratakan:

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

Penyelesaian

Menyesuaikan kaedah MarshalJSON untuk jenis NullString dengan menentukan jenis baharu membolehkan untuk output yang lebih terkawal.

type MyNullString struct {
    sql.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 melaksanakan antara muka json.Marshaler, jenis MyNullString boleh mengawal cara ia diwakili sebagai JSON. Apabila ia bukan nol, ia mengembalikan rentetan asas dan untuk nilai nol, ia mengembalikan rentetan "null" literal.

Contoh yang disediakan dalam taman permainan kod menunjukkan gelagat yang diingini:

https://play.golang.org/p/Ak_D6QgIzLb

Penyelesaian ini meratakan output dengan mengabaikan medan Sah dan mengembalikan nilai rentetan secara langsung.

Atas ialah kandungan terperinci Bagaimana untuk Meratakan Output JSON daripada struct Go yang mengandungi sql.NullString?. 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