Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyahmarshal JSON dengan Cekap menjadi Array of Go Structs?
Menyahmarshall JSON ke dalam Array of Objects in Go
Anda menghadapi cabaran semasa cuba menghuraikan objek JSON ke dalam tatasusunan struct tersuai . JSON yang anda berikan, bagaimanapun, nampaknya tidak sah kerana ia tidak mempunyai koma antara pasangan nilai kunci dalam objek peringkat atas. Berikut ialah JSON yang diperbetulkan dan diformatkan:
{ "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 } }
Percubaan awal anda untuk menghuraikan JSON mengalami ralat kerana anda menetapkan peta yang terhasil daripada pembongkaran JSON kepada antara muka{} nilai. Apabila mengindeks peta ini, anda perlu menaip menegaskan nilai sekali lagi dengan v.(map[rentetan]antara muka{}) dan setiap kali anda mendapatkan kunci daripada peta.
Selain itu, anda cuba memasukkan int sebagai kunci peta dengan rentetan sebagai kekunci, yang akan mengakibatkan ralat selanjutnya.
Kepada memudahkan proses unmarshalling dan mengelakkan penegasan jenis manual, anda boleh menggunakan teknik di mana anda menyediakan unmarshalling dengan jenis data sasaran secara langsung. Berikut ialah contoh yang dikemas kini:
package main import ( "encoding/json" ) type Monster struct { MonsterId int32 `json:"monster-id"` Level int32 `json:"level"` SkillLevel int32 `json:"skill-level"` AimerId int32 `json:"aimer-id"` } type MonsterCollection struct { Pool map[string]Monster } func (mc *MonsterCollection) FromJson(jsonStr string) error { var data = &mc.Pool b := []byte(jsonStr) return json.Unmarshal(b, data) } func main() { jsonString := `{ "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 } }` mc := MonsterCollection{} if err := mc.FromJson(jsonString); err != nil { // Handle error } for _, monster := range mc.Pool { // Access monster data here } }
Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal JSON dengan Cekap menjadi Array of Go Structs?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!