Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Membezakan Antara JSON Null dan Medan Hilang Apabila Menyahmarshaling dalam Go?

Bagaimanakah Saya Boleh Membezakan Antara JSON Null dan Medan Hilang Apabila Menyahmarshaling dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-03 21:03:17
asal
400 orang telah melayarinya

How Can I Distinguish Between JSON Null and Missing Fields When Unmarshaling in Go?

Membezakan Medan JSON Ditetapkan kepada Null lwn. Tidak Hadir Semasa Menyahmarshaling

Apabila menyahmarshaling JSON ke dalam struct Golang, pembezaan antara medan ditetapkan kepada null dan bidang yang tidak ada boleh menjadi penting. Kedua-dua senario menghasilkan nilai sifar dalam struct, mengaburkan semantik yang dimaksudkan.

Pembezaan Menggunakan Generik (Go 1.18 )

Go 1.18 memperkenalkan generik, membolehkan penyelesaian yang ringkas generik tunggal jenis:

type Optional[T any] struct {
    Defined bool
    Value   *T
}
Salin selepas log masuk

Jenis ini merangkumi konsep nilai pilihan dengan keadaan medan yang ditentukan (Ditakrifkan).

Contoh Penggunaan:

type Payload struct {
    Field1 Optional[string] `json:"field1"`
    Field2 Optional[int]   `json:"field2"`
}
Salin selepas log masuk

Selepas unmarshaling, medan dengan nilai yang ditentukan (Ditakrifkan == benar) boleh membezakan antara nilai nol (Nilai == sifar) dan nilai yang tiada (Ditakrifkan == palsu).

Penyelesaian Pra-Generik

Pembungkus Jenis Tersuai:

type OptionalString struct {
    Defined bool
    Value   *string
}

func (os *OptionalString) UnmarshalJSON(data []byte) error {
    os.Defined = true
    return json.Unmarshal(data, &os.Value)
}
Salin selepas log masuk

Contoh Penggunaan:

type Payload struct {
    Field1 string         `json:"field1"`
    Field2 OptionalString `json:"field2"`
}
Salin selepas log masuk

Penghadan:

  • Memerlukan pembalut struktur khusus untuk setiap jenis yang disokong (cth., Nombor Pilihan untuk jenis angka).
  • Tidak memberikan perbezaan menyeluruh antara batal dan hilang nilai.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membezakan Antara JSON Null dan Medan Hilang Apabila Menyahmarshaling dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan