Menyahmarshall Nested JSON ke dalam Tatasusunan Objek dalam Go
Masalah
Pertimbangkan data JSON berikut:
{
"1001":{
"level":10,
"monster-id":1001,
"skill-level":1,
"aimer-id":301
},
"1002":{
"level":12,
"monster-id":1002,
"skill-level":1,
"aimer-id":302
},
"1003":{
"level":16,
"monster-id":1003,
"skill-level":2,
"aimer-id":303
}
}
Salin selepas log masuk
The matlamatnya adalah untuk menyahmarshal JSON ini menjadi pelbagai Monster objek.
type Monster struct {
MonsterId int32
Level int32
SkillLevel int32
AimerId int32
}
Salin selepas log masuk
Penyelesaian
Untuk mencapainya, ikuti langkah berikut:
-
Tentukan MonsterCollection: Buat jenis MonsterCollection untuk dipegang peta objek Raksasa dengan rentetan kunci.
type MonsterCollection struct {
Pool map[string]Monster
}
Salin selepas log masuk
-
Laksanakan Kaedah FromJson: Tentukan kaedah FromJson pada jenis MonsterCollection untuk mengendalikan unmarshaling.
func (mc *MonsterCollection) FromJson(jsonStr string) error {
var data *map[string]Monster
b := []byte(jsonStr)
return json.Unmarshal(b, &data)
}
Salin selepas log masuk
- Menggunakan data var *map[string]Monster mengelakkan penggunaan antara muka{}, memastikan bahawa peta yang dihasilkan mempunyai jenis yang diingini.
- Mengirim data sebagai penunjuk memastikan bahawa perubahan yang dibuat semasa unmarshaling dicerminkan dalam medan Pool MonsterCollection.
-
Jenis Kunci yang Betul dalam Kolam: Tukar jenis kunci peta Kolam kepada rentetan untuk memadankan kekunci dalam JSON data.
-
Gunakan Struct Tag: Tambah tag struct JSON pada struct Monster untuk menentukan nama medan dalam data JSON.
type Monster struct {
MonsterId int32 `json:"monster-id"`
Level int32 `json:"level"`
SkillLevel int32 `json:"skill-level"`
AimerId int32 `json:"aimer-id"`
}
Salin selepas log masuk
-
Panggil FromJson: Panggil kaedah FromJson dengan rentetan JSON untuk menyahmarshal data ke dalam the MonsterCollection.
mc := new(MonsterCollection)
err := mc.FromJson(jsonStr)
Salin selepas log masuk
-
Semak Ralat: Kendalikan sebarang ralat yang dikembalikan oleh FromJson untuk tujuan penyahpepijatan.
-
Akses Objek : Gunakan medan Pool MonsterCollection untuk mengakses Monster individu objek.
for id, monster := range mc.Pool {
fmt.Println(id, monster)
}
Salin selepas log masuk
Dengan mengikut langkah ini, anda boleh berjaya menyahmarshal data JSON bersarang ke dalam tatasusunan objek Monster dalam Go.
Atas ialah kandungan terperinci Bagaimana untuk Unmarshal Nested JSON ke dalam Array Objek dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!