首页 >后端开发 >Golang >如何在 Go 中将动态 JSON 键解组到结构字段中?

如何在 Go 中将动态 JSON 键解组到结构字段中?

Patricia Arquette
Patricia Arquette原创
2024-11-19 01:26:02956浏览

How to Unmarshal Dynamic JSON Keys into Struct Fields in Go?

将动态 JSON 键解组到 Go 中的结构体字段

动态 JSON 键在解组到具有静态字段名称的结构时可能会带来挑战。考虑以下 JSON 配置文件:

{
  "things" :{
    "123abc" :{
      "key1": "anything",
      "key2" : "more"
    },
    "456xyz" :{
      "key1": "anything2",
      "key2" : "more2"
    },
    "blah" :{
      "key1": "anything3",
      "key2" : "more3"
    }
  }
}

要在 Go 结构中表示此 JSON,您可以使用映射而不是静态字段名称:

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}

然后,解组 JSON使用 json.Unmarshal 函数:

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}

通过这种方法,动态键成为映射的键,允许您根据需要访问值。

但是,如果键必须是 Thing 结构体的成员,您可以编写一个循环来在解组后添加键:

type Thing struct {
    Name string `json:"-"` // add the field
    Key1 string
    Key2 string
}

...

// Fix the name field after unmarshal
for k, t := range x.Things {
    t.Name = k
    x.Things[k] = t
}

此方法允许您同时拥有作为字段的键和动态值。

以上是如何在 Go 中将动态 JSON 键解组到结构字段中?的详细内容。更多信息请关注PHP中文网其他相关文章!

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