在 Go 中將 JSON 解組為物件陣列
嘗試將 JSON 物件解析為自訂結構陣列時遇到挑戰。但是,您提供的 JSON 似乎無效,因為它在頂級物件中的鍵值對之間缺少逗號。以下是經過更正和格式化的JSON:
{ "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 } }
您最初嘗試解析JSON 時遇到了錯誤,因為您將JSON 解組產生的映射分配給了介面{}價值。索引此對應時,您需要使用 v.(map[string]interface{}) 再次輸入斷言值,並且每次從映射中擷取鍵時。
此外,您嘗試插入一個 int作為以字串為鍵的映射的鍵,這會導致進一步的錯誤。
簡化解組過程並避免手動類型斷言,您可以使用直接提供目標資料類型的解組技術。這是一個更新的範例:
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 } }
以上是如何有效地將 JSON 解組為 Go 結構陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!