在 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中文网其他相关文章!