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