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