首页  >  文章  >  后端开发  >  如何将带有动态键的 JSON 解组到 Go 中的结构字段中?

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-16 00:07:03509浏览

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

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

当处理不符合预定结构的 JSON 数据时,解组变得更加困难具有挑战性的。在这种情况下,您有一个名为“things”的对象中包含动态键的 JSON 配置文件。

要解决此问题,一种解决方案是在结构中使用映射来捕获动态键。下面是一个示例:

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}

“Things”字段不是为每个键定义特定的结构体字段,而是存储键值对的映射,其中键是动态键。

要使用此方法解组 JSON 数据,您需要执行以下操作:

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

这将解组JSON 到“X”结构中,动态键映射到“Things”映射中适当的结构实例。

但是,如果您仍然希望将键值作为结构中的字段而不是作为映射键的一部分,您可以使用以下方法:

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

...

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

这涉及向“Name”字段添加“-`json”标签,以在解组期间忽略它。解组后,使用循环将动态键分配给映射中每个结构实例的“Name”字段。

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

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