Menyahkod JSON dengan Struktur Varian
Titik akhir yang anda gunakan mengembalikan JSON dalam pelbagai format, kadangkala sebagai rentetan dan masa lain sebagai tatasusunan. Untuk mengendalikan ketidakkonsistenan ini, soalan berikut meneroka pendekatan terbaik untuk mereka bentuk struct Go yang boleh menampung kedua-dua jenis.
Soalan:
Bagaimana saya boleh mencipta Go struct yang boleh menyahmarshal data JSON dengan jenis pembolehubah, sama ada rentetan atau tatasusunan rentetan? Adakah terdapat penyelesaian yang elegan selain daripada percubaan untuk menyahkod kepada dua struct berasingan?
Jawapannya:
Pendekatan yang lebih canggih melibatkan pembongkaran JSON ke dalam jenis antara muka{}. Pendekatan jenis-agnostik ini membenarkan pengendalian dinamik jenis nilai yang berbeza.
Untuk melaksanakan teknik ini, cipta satu struct dengan medan antara muka jenis{}, seperti yang ditunjukkan dalam contoh berikut:
<code class="go">type Response struct { Message interface{} `json:"message"` }</code>
Apabila menyahmarshaling data JSON ke dalam struct ini, anda boleh menggunakan suis jenis atau penegasan jenis untuk menentukan jenis sebenar medan Mesej. Ini membolehkan anda memproses data dengan sewajarnya.
Berikut ialah contoh pelaksanaan:
<code class="go">func main() { inputs := []string{ `{"message":"Message"}`, `{"message":["ERROR_CODE"]}`, } for _, input := range inputs { var r Response if err := json.Unmarshal([]byte(input), &r); err != nil { panic(err) } switch x := r.Message.(type) { case string: fmt.Println("Success, message:", x) case []interface{}: fmt.Println("Error, code:", x) default: fmt.Println("Something else:", x) } } }</code>
Output:
Success, message: Message Error, code: [ERROR_CODE]
Dengan menggunakan antara muka{} pendekatan, anda memperoleh fleksibiliti dalam mengendalikan data JSON dengan pelbagai jenis, memudahkan pangkalan kod anda.
Atas ialah kandungan terperinci Bagaimana untuk Unmarshal Data JSON dengan Jenis Pembolehubah: Rentetan atau Susunan Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!