Pengendalian Kunci Dinamik dalam Viper/JSON Unmarshaling
Apabila berurusan dengan data JSON yang menyimpang daripada format yang telah ditetapkan, unmarshaling dalam Go boleh menjadi mencabar . Pertimbangkan fail konfigurasi JSON dengan kekunci dinamik, seperti yang berikut:
{ "things" :{ "123abc" :{ "key1": "anything", "key2" : "more" }, "456xyz" :{ "key1": "anything2", "key2" : "more2" }, "blah" :{ "key1": "anything3", "key2" : "more3" } } }
Untuk menyahmarshal data ini ke dalam struct Go dengan kekunci dinamik, satu pendekatan ialah menggunakan peta:
type X struct { Things map[string]Thing } type Thing struct { Key1 string Key2 string }
Dengan menggunakan map[string]Thing, struct yang terhasil boleh mengendalikan sebarang bilangan kekunci dinamik. Nyahmarshal data menggunakan:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
Pendekatan ini membolehkan pembongkaran terus kekunci dinamik dalam JSON dan Viper (menggunakan viper.Get("things") untuk mendapatkan tatasusunan nilai Thing).
Walau bagaimanapun, jika kunci itu sendiri mestilah ahli struct, gelung pasca unmarshalling boleh digunakan untuk mengemas kini medan:
type Thing struct { Name string `json:"-"` // add the field Key1 string Key2 string } // Fix the name field after unmarshal for k, t := range x.Things { t.Name = k x.Things[k] = t }
Ini membenarkan kunci untuk dimasukkan ke dalam struct sambil mengekalkan sifat dinamik asal data JSON.
Atas ialah kandungan terperinci Bagaimana untuk Unmarshal JSON dengan Dynamic Keys in Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!