gpt4 book ai didi

go - 我如何解码 Dynamic Viper 或 JSON 键作为结构字段的一部分

转载 作者:数据小太阳 更新时间:2023-10-29 03:11:25 27 4
gpt4 key购买 nike

当 JSON 不是“所需”格式时,我发现 GOLANG 中的编码(marshal)处理和解封处理非常困惑。例如,在一个 JSON 配置文件(我正在尝试将其与 Viper 一起使用)中,我有一个如下所示的配置文件:

{
"things" :{
"123abc" :{
"key1": "anything",
"key2" : "more"
},
"456xyz" :{
"key1": "anything2",
"key2" : "more2"
},
"blah" :{
"key1": "anything3",
"key2" : "more3"
}
}
}

其中“事物”可能是另一个对象中的对象 n 层以下我有一个结构:

type Thing struct {
Name string `?????`
Key1 string `json:"key2"`
Key2 string `json:"key2"`
}

如何解码 JSON,更具体地说是 viper 配置(使用 viper.Get("things") 获取 Things 数组,例如:

t:= Things{
Name: "123abc",
Key1: "anything",
Key2: "more",
}

我特别不确定如何将 key 作为结构字段获取

最佳答案

为动态键使用映射:

type X struct {
Things map[string]Thing
}

type Thing struct {
Key1 string
Key2 string
}

像这样解码:

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

Playground Example

如果名称必须是结构的成员,那么写一个循环在解码之后添加它:

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
}

Playground example

关于go - 我如何解码 Dynamic Viper 或 JSON 键作为结构字段的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50749869/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com