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

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

Barbara Streisand
Lepaskan: 2024-11-30 19:35:12
asal
411 orang telah melayarinya

How Can I Differentiate Between Null and Missing JSON Fields in Go?

Membezakan Medan JSON Null dan Tidak Wujud dalam Go

Apabila menyahmarshall JSON ke dalam struct Go, sukar untuk membezakan antara medan JSON yang ditetapkan secara eksplisit kepada null dan yang tidak terdapat dalam muatan JSON. Perbezaan ini adalah penting dalam banyak senario, kerana ia mempengaruhi semantik data dan tafsirannya.

Go 1.18 Solution

Bermula dengan Go 1.18, struktur Pilihan generik boleh digunakan untuk menangani isu ini:

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

Ini struct melaksanakan antara muka UnmarshalJSON, membolehkan ia membezakan nilai yang ditakrifkan dan yang tidak ditakrifkan. Apabila menyahmarshaling muatan JSON, medan yang ditentukan bagi struct Pilihan akan ditetapkan kepada benar, tidak kira sama ada nilai itu adalah nol atau nilai yang sah.

Contoh Penggunaan

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

Selepas membongkar muatan JSON, medan Defined boleh digunakan untuk menentukan sama ada medan tertentu terdapat dalam JSON atau bukan.

Penyelesaian Pra-Pergi 1.18

Untuk versi Go sebelum 1.18, jenis tersuai boleh dibuat untuk mencapai hasil yang sama.

type OptionalString struct {
    Defined bool
    Value   *string
}
Salin selepas log masuk

Sama seperti struct Pilihan dalam Go 1.18 , jenis ini melaksanakan antara muka UnmarshalJSON untuk tetapkan medan Defined dengan sewajarnya.

Contoh Penggunaan

type Payload struct {
    SomeField1 string         `json:"somefield1"`
    SomeField2 OptionalString `json:"somefield2"`
}
Salin selepas log masuk

Dengan menggunakan jenis tersuai ini, medan Defined boleh diperiksa untuk membezakan antara medan kosong dan tidak wujud .

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membezakan Antara Medan JSON Null dan Hilang 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