首页 >后端开发 >Golang >如何在 Go 中将 JSON 解组为对象数组?

如何在 Go 中将 JSON 解组为对象数组?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-27 08:19:09186浏览

How to Unmarshal JSON into an Array of Objects in Go?

将 JSON 解组为 Go 中的对象数组

将 JSON 数据解析为自定义 Go 结构对于许多编程任务至关重要。本题探讨了如何在 Go 中将 JSON 解析为对象数组。

问题

问题中提供的 JSON 数据表现出特定的格式,其中每个键代表一个唯一标识符,对应的值是一个包含多个属性的嵌套对象。目标是将这些 JSON 数据解组到一个结构数组中,其中数组中的每个元素代表 JSON 中的嵌套对象之一。

问题中提供的代码片段尝试将 JSON 解析为MonsterCollection 结构,其中包含 Monster 结构的字符串映射。但是,由于类型不匹配,编译器报告无效操作错误。

解决方案

代码片段的主要问题在于它将 JSON 解组为接口{} 类型,允许动态类型,但功能有限。要访问嵌套对象中的特定字段,需要将循环中的 v 变量类型断言为正确的类型。

此外,代码尝试将 Monster 对象插入具有整数键的映射中。但是,Pool 映射是字符串到 Monster 结构的映射,因此键应该是字符串。

以下代码演示了如何正确地将 JSON 解组为 Monster 结构数组:

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 map[string]Monster
    b := []byte(jsonStr)
    err := json.Unmarshal(b, &data)
    if err != nil {
        return err
    }

    mc.Pool = data
    return nil
}

在此代码中:

  • Monster 结构使用 json 标签将字段名称映射到相应的 JSON键。
  • MonsterCollection 结构包含字符串到 Monster 结构的映射,使用唯一标识符作为键。
  • MonsterCollection 的 FromJson 方法将 JSON 字符串作为参数,将其解组到数据映射,将映射分配给 Pool 字段,并返回遇到的任何错误。

现在,JSON数据可以被解组到 MonsterCollection 结构中并通过 Pool 映射进行访问,这提供了一种使用唯一标识符检索单个怪物的便捷方法。

以上是如何在 Go 中将 JSON 解组为对象数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn