Mengendalikan Jenis Medan JSON Dinamik dalam Go
Apabila menyahmarshall JSON dalam Go ke dalam struct, seseorang mungkin menghadapi ketidakkonsistenan dalam jenis nilai sesuatu kunci khusus merentas permintaan API. Cabaran ini timbul apabila pelayan menghantar struktur objek yang berbeza atau rujukan rentetan untuk kunci yang sama. Ini boleh menimbulkan masalah kerana Go memerlukan struktur tetap untuk unmarshaling.
Untuk menangani isu ini, pendekatan jenis dinamik menggunakan jenis antara muka boleh digunakan. Pertimbangkan data JSON berikut:
{ "mykey": [ {obj1}, {obj2} ] }
Untuk menangkap sifat dinamik ini, kita boleh mentakrifkan struct seperti berikut:
type Data struct { MyKey []interface{} `json:"mykey"` }
Apabila JSON dengan nilai rentetan ditemui, seperti:
{ "mykey": [ "/obj1/is/at/this/path", "/obj2/is/at/this/other/path" ] }
Elemen kepingan MyKey akan dinyahkodkan sebagai rentetan. Untuk objek, ia akan dinyahkodkan sebagai nilai peta[rentetan]antara muka{}. Perbezaan ini boleh dibuat menggunakan suis jenis:
for i, v := range data.MyKey { switch x := v.(type) { case string: fmt.Println("Got a string: ", x) case map[string]interface{}: fmt.Printf("Got an object: %#v\n", x) } }
Dengan menyahmarshaling JSON ke dalam jenis antara muka dan menggunakan suis jenis, pembangun Go boleh mengendalikan jenis medan dinamik dan menghuraikan data dengan sewajarnya, tanpa mengira struktur yang disediakan oleh pelayan.
Atas ialah kandungan terperinci Bagaimana Go Boleh Mengendalikan Jenis Medan JSON Dinamik Semasa Unmarshaling?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!