在 Go 中,处理结构字段中的动态 JSON 键可能具有挑战性。让我们深入研究这个问题,并使用 Viper 库提供一个全面的解决方案。
问题陈述
考虑一个带有动态键的 JSON 配置文件:
{ "things" :{ "123abc" :{ "key1": "anything", "key2" : "more" }, "456xyz" :{ "key1": "anything2", "key2" : "more2" }, "blah" :{ "key1": "anything3", "key2" : "more3" } } }
要将此配置解析为结构体,可以定义:
type Thing struct { Name string `?????` Key1 string `json:"key2"` Key2 string `json:"key2"` }
但是,问题出现了:如何将动态键解组为结构体字段名称?
解决方案
来处理动态键,考虑使用映射:
type X struct { Things map[string]Thing } type Thing struct { Key1 string Key2 string }
Unmarshal例如:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
Playground 示例
如果键必须是结构体的成员,则可以在解组后使用循环添加它:
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 }
游乐场示例
使用这些技术,即使使用像 Viper 这样的库,您也可以有效地将动态 JSON 键解组到 Go 中的结构字段中。
以上是如何在 Go 中将动态 Viper 或 JSON 键解组为结构字段?的详细内容。更多信息请关注PHP中文网其他相关文章!