当unMarshaling不是“所需的”格式时,我发现GOLANG中的marshaling & JSON非常令人困惑。例如,在JSON配置文件中(我正在尝试将其与Viper一起使用),我有一个配置文件,如下所示:
{
"things" :{
"123abc" :{
"key1": "anything",
"key2" : "more"
},
"456xyz" :{
"key1": "anything2",
"key2" : "more2"
},
"blah" :{
"key1": "anything3",
"key2" : "more3"
}
}
}
其中"things“可以是n层以下的另一个对象中的对象,我有一个结构:
type Thing struct {
Name string `?????`
Key1 string `json:"key2"`
Key2 string `json:"key2"`
}
如何对JSON进行unMarshalling,更具体地说,使用viper配置(使用viper.Get("things") )来获取Things
数组,如下所示:
t:= Things{
Name: "123abc",
Key1: "anything",
Key2: "more",
}
我特别不确定如何将键作为struct字段获取
发布于 2018-06-08 04:47:22
对动态关键点使用贴图:
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
}
如果名称必须是结构的成员,那么在解组之后编写一个循环来添加它:
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
}
https://stackoverflow.com/questions/50749869
复制相似问题