Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengendalikan Boolean Unmarshalling daripada JSON dengan \'0\' dan \'false\' (dan \'1\' dan \'true\')?

Bagaimana untuk Mengendalikan Boolean Unmarshalling daripada JSON dengan \'0\' dan \'false\' (dan \'1\' dan \'true\')?

Linda Hamilton
Lepaskan: 2024-11-26 10:11:13
asal
166 orang telah melayarinya

How to Handle Boolean Unmarshalling from JSON with

Menghapuskan Nilai Boolean daripada JSON dengan Kedua-dua 0 dan Palsu

Menghuraikan data JSON memerlukan pertimbangan teliti jenis data untuk mengelakkan salah tafsir. Dalam kes di mana perkhidmatan menukar nilai boolean sebagai 0 dan palsu (serta 1 dan benar), mencapai unmarshalling yang betul menjadi penting.

Pakej pengekodan/json terbina menyediakan kaedah untuk menyesuaikan proses unmarshalling menggunakan jenis tersuai . Dengan mentakrifkan jenis tersuai, anda boleh melaksanakan logik unmarshalling yang dipesan lebih dahulu untuk mengendalikan penukaran yang diingini.

Jenis Nyahmarshaler Tersuai

Buat jenis tersuai yang melaksanakan antara muka json.Unmarshaler . Jenis ini akan bertanggungjawab untuk menukar data JSON kepada format boolean yang dikehendaki.

type ConvertibleBoolean bool

func (bit *ConvertibleBoolean) UnmarshalJSON(data []byte) error {
    asString := string(data)
    if asString == "1" || asString == "true" {
        *bit = true
    } else if asString == "0" || asString == "false" {
        *bit = false
    } else {
        return errors.New(fmt.Sprintf("Boolean unmarshal error: invalid input %s", asString))
    }
    return nil
}
Salin selepas log masuk

Dalam contoh ini, ConvertibleBoolean ialah jenis boolean tersuai yang melaksanakan antara muka json.Unmarshaler. Ia mengatasi proses penyahmarshalan JSON lalai dan menyemak data masuk sebagai rentetan. Jika ia mengenal pasti rentetan yang mewakili benar atau salah (atau pasangan berangkanya 1 dan 0), ia menetapkan nilai ConvertibleBoolean dengan sewajarnya. Jika tidak, ralat akan dikembalikan.

Menggunakan Jenis Tersuai

Sekarang anda mempunyai jenis unmarshalling tersuai, gunakannya dalam struct untuk mentakrifkan struktur JSON yang dijangkakan.

type MyType struct {
    AsBoolean ConvertibleBoolean `json:"field1"`
    AlsoBoolean ConvertibleBoolean `json:"field2"`
}
Salin selepas log masuk

Contoh Unmarshalling

Dengan jenis tersuai disediakan, anda boleh menyahmarshal data JSON ke dalam struct MyType, menukar kedua-dua 0 dan false (serta 1 dan benar) kepada nilai boolean dengan betul.

input_json := `{
    "field1" : true,
    "field2" : 1
}`

obj := MyType{}
json_err := json.Unmarshal([]byte(input_json), &obj)
fmt.Printf("%v\n", obj.AsBoolean) //"true"
fmt.Printf("%v\n", obj.AlsoBoolean) //"true"
Salin selepas log masuk

Data JSON contoh ini mengandungi "true" dan "1", yang akan dianggap sebagai jenis yang berbeza oleh unmarshaller lalai. Walau bagaimanapun, dengan menggunakan ConvertibleBoolean, kedua-dua nilai itu dipisahkan dengan betul sebagai benar.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Boolean Unmarshalling daripada JSON dengan \'0\' dan \'false\' (dan \'1\' dan \'true\')?. 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