Самый простой способ - использовать тип 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
по желанию.
Это наиболее общий формат для данных JSON в Go и один из способов, которыми библиотека Go JSON обрабатывает типы для JSON. Смотрите эти документы: https://golang.org/pkg/encoding/json/#Unmarshal