聲明一個map[string]map[string]...類型的變量并不理想,有沒有更好的方法 snaps := map[string]map[string]map[string]map[string]string{ "distros": { "aws": { "eu-west-1": { "snap-0": "/dev/sdm", }, "eu-west-2": { "snap-1": "/dev/sdm", }, }, },}fmt.Println(snaps["distros"]["aws"]["eu-west-1"])
1 回答

忽然笑
TA貢獻1806條經驗 獲得超5個贊
最簡單的方法是使用 type 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 類型的方式之一。
- 1 回答
- 0 關注
- 141 瀏覽
添加回答
舉報
0/150
提交
取消