Menghapus Kekunci JSON Dinamik dengan struktur Viper dan Go
Dalam Go, mengendalikan data JSON dengan kekunci dinamik boleh menjadi mencabar. Sebagai contoh, jika anda mempunyai fail konfigurasi JSON dengan objek yang mengandungi kekunci yang berbeza dalam nama, bagaimanakah anda menyahmarshal data ini ke dalam struktur Go?
Mari kita ambil fail konfigurasi JSON berikut sebagai contoh:
{ "things" :{ "123abc" :{ "key1": "anything", "key2" : "more" }, "456xyz" :{ "key1": "anything2", "key2" : "more2" }, "blah" :{ "key1": "anything3", "key2" : "more3" } } }
Untuk menangani perkara ini, anda boleh menggunakan peta untuk mewakili kekunci dinamik, seperti yang ditunjukkan dalam Go yang dikemas kini ini struct:
type X struct { Things map[string]Thing } type Thing struct { Key1 string Key2 string }
Setelah anda mentakrifkan struct, anda boleh menyahmarshal data JSON seperti ini:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
Jika nama kekunci objek mestilah medan " Thing", anda boleh menambah gelung untuk menetapkannya selepas menyahmarshaling:
// Fix the name field after unmarshal for k, t := range x.Things { t.Name = k x.Things[k] = t }
Sebagai alternatif, JSON tersuai penyahkod boleh digunakan untuk mengendalikan kekunci dinamik dengan mengatasi kaedah "Nyahkod". Rujuk dokumentasi rasmi Go untuk mendapatkan butiran lanjut tentang pendekatan ini.
Dengan teknik ini, anda boleh menyahmarshal kekunci JSON dinamik secara berkesan ke dalam struct Go, membolehkan anda bekerja dengan fail konfigurasi kompleks dan struktur data.
Atas ialah kandungan terperinci Bagaimanakah anda membongkar kunci JSON dinamik dengan struktur Viper dan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!