我有一个看起来像
的json结构{
"devices": [
{
"server": {
"bu": {
"add_info": false,
"applications": [
[
"Systems",
12
],
[
"SomeProject",
106
]
],
"name": [
[
"SomeName",
4
],
[
"CommonName",
57
]
],
"owners": [
"SomeOwner1",
"SomeOwner2"
],
"users": [
"SomeUser1",
"SomeUser2"
]
}
}
}
]
}
我试图将它添加到结构中,结构看起来像
type TwoD [][]string
type MainContainer struct {
Devices []struct{
Server struct{
Bu struct{
Add_info string `json:"add_info"`
Applications TwoD `json:"applications"`
Name TwoD `json:"name"`
Owners []string `json:"owners"`
Users []string `json:"users"`
} `json:"bu"`
} `json:"server"`
} `json:"devices"`
}
然而,当我打印结构时,我从2D切片中只得到一个值而没有超出它。
func main() {
jsonfile, err := ioutil.ReadFile("./search.json")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
var jsonobject MainContainer
json.Unmarshal(jsonfile, &jsonobject)
fmt.Printf("%v", jsonobject)
}
{[{{{ [[Systems ]] [] [] []}}}]}
但是,如果我省略结构中的2d切片,如
type MainContainer struct {
Devices []struct{
Server struct{
Bu struct{
Add_info string `json:"add_info"`
//Applications TwoD `json:"applications"`
//Name TwoD `json:"name"`
Owners []string `json:"owners"`
Users []string `json:"users"`
} `json:"bu"`
} `json:"server"`
} `json:"devices"`
}
所有内容都打印为
{[{{{ [SomeOwner1 SomeOwner2] [SomeUser1 SomeUser2]}}}]}
有人可以帮我辨别这里有什么问题吗?
Here是带有struct和sample json的golang游乐场的链接。这两个TwoD切片在结构中进行了注释。
注意::编辑了一个未注释的2d切片的playground链接,以便记录差异,并将类型字符串更改为bool,如@cnicutar所指出的,谢谢。
答案 0 :(得分:2)
主要问题是您没有处理json.Unmarshal
返回的错误。一旦处理完毕,json(和解码结构)的问题就变得很明显了。
if err := json.Unmarshal(jsonfile, &jsonobject); err != nil {
fmt.Printf("Unmarshal: %v\n", err)
}
首先:
Unmarshal json:无法将bool解组为String类型的Go值
因此Add_info
应为bool
。修复后,取消注释Applications
:
Unmarshal json:无法将数字解组为字符串
的Go值
将12更改为“12”并将106更改为“106”后,结果为:
{[{{{false [[Systems 12] [SomeProject 106]] [SomeUser1 SomeUser2]}}}]}