声明类型为map [string] map [string] ...的变量不是很理想,有没有更好的方法
[
{
"_type": "EntityParent",
"name": "Test000",
"_id": 1,
"parentid": -1
},
{
"_type": "EntityChild1",
"name": "Test222",
"_id": 2,
"parentid": 1
},
{
"_type": "EntityChild2",
"name": "Test333",
"_id": 3,
"parentid": 1
},
{
"_type": "EntityChild2_1",
"name": "Test444",
"_id": 6,
"parentid": 3
},
{
"_type": "EntityChild2_1_1",
"name": "Test555",
"_id": 7,
"parentid": 6
},
{
"_type": "EntityChild3",
"name": "Test111 ",
"_id": 4,
"parentid": 1
},
{
"_type": "EntityChild4",
"name": "Test666",
"_id": 5,
"parentid": 1
}
]
答案 0 :(得分:0)
最简单的方法是使用类型map[string]interface{}
。由于空接口interface{}
可以引用任何类型,因此可以处理JSON的任意嵌套性质。
为此,您必须先将文字数据写为字符串,然后将其解析为Go map
。
请记住,这里是您的示例的重构:
首先:import "encoding/json"
,然后
snapsStr := `{
"distros": {
"aws": {
"eu-west-1" : {
"snap-0": "/dev/sdm"
},
"eu-west-2": {
"snap-1": "/dev/sdm"
}
}
}
}`
var snaps map[string]interface{}
json.Unmarshal([]byte(snapsStr), &snaps)
现在snaps
就可以了。
这是Go中JSON数据最通用的格式,也是Go JSON库处理JSON类型的方式之一。请参阅以下文档:https://golang.org/pkg/encoding/json/#Unmarshal