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

如何在 Go 中将嵌套 JSON 解组到对象数组中?

Barbara Streisand
发布: 2024-11-25 10:59:14
原创
428 人浏览过

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

在 Go 中将嵌套 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 解组到 Monster 数组中

type Monster struct {
    MonsterId  int32
    Level      int32
    SkillLevel int32
    AimerId    int32
}
登录后复制

解决方案

要实现此目的,请按照下列步骤操作:

  1. 定义 MonsterCollection: 创建一个 MonsterCollection 类型来保存带字符串的 Monster 对象的地图键。
type MonsterCollection struct {
    Pool map[string]Monster
}
登录后复制
  1. 实现 FromJson 方法: 在 MonsterCollection 类型上定义 FromJson 方法来处理解组。
func (mc *MonsterCollection) FromJson(jsonStr string) error {
    var data *map[string]Monster
    b := []byte(jsonStr)
    return json.Unmarshal(b, &data)
}
登录后复制
  • 使用 var data *map[string] 怪物避免使用interface{},确保生成的映射具有所需的类型。
  • 将数据作为指针传递可确保解组过程中所做的更改反映在 MonsterCollection 的 Pool 字段中。
  1. 池中正确的键类型:将池映射的键类型更改为字符串以匹配 JSON 中的键data.
  2. 使用结构体标签: 将 JSON 结构体标签添加到 Monster 结构体中,以指定 JSON 数据中的字段名称。
type Monster struct {
    MonsterId  int32 `json:"monster-id"`
    Level      int32 `json:"level"`
    SkillLevel int32 `json:"skill-level"`
    AimerId    int32 `json:"aimer-id"`
}
登录后复制
  1. 调用 FromJson: 使用 JSON 字符串调用 FromJson 方法将数据解组到MonsterCollection。
mc := new(MonsterCollection)
err := mc.FromJson(jsonStr)
登录后复制
  1. 检查错误:处理 FromJson 返回的任何错误以进行调试。
  2. 访问对象: 使用 MonsterCollection 的 Pool 字段来访问单个 Monster
for id, monster := range mc.Pool {
    fmt.Println(id, monster)
}
登录后复制

按照以下步骤,您可以成功地将嵌套的 JSON 数据解组到 Go 中的 Monster 对象数组中。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板