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 }
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"` }
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"
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!