使用 Viper 和 Go 结构解组动态 JSON 键
在 Go 中,使用动态键处理 JSON 数据可能具有挑战性。例如,如果您有一个 JSON 配置文件,其中的对象包含名称不同的键,那么如何将此数据解组到 Go 结构中?
让我们以以下 JSON 配置文件为例:
{ "things" :{ "123abc" :{ "key1": "anything", "key2" : "more" }, "456xyz" :{ "key1": "anything2", "key2" : "more2" }, "blah" :{ "key1": "anything3", "key2" : "more3" } } }
为了解决这个问题,您可以使用映射来表示动态键,如更新的 Go 结构所示:
type X struct { Things map[string]Thing } type Thing struct { Key1 string Key2 string }
定义结构后,您可以解组像这样的 JSON 数据:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
如果对象键的名称应该是“Thing”结构的字段,您可以添加一个循环来在解组后分配它:
// Fix the name field after unmarshal for k, t := range x.Things { t.Name = k x.Things[k] = t }
或者,可以使用自定义 JSON 解码器通过重写“Decode”方法来处理动态键。有关此方法的更多详细信息,请参阅 Go 官方文档。
通过这些技术,您可以有效地将动态 JSON 键解组到 Go 结构中,从而使您能够处理复杂的配置文件和数据结构。
以上是如何使用 Viper 和 Go 结构解组动态 JSON 键?的详细内容。更多信息请关注PHP中文网其他相关文章!