Есть ли лучший способ объявить переменную JSON - PullRequest
0 голосов
/ 31 октября 2018

Объявление переменной типа 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 Ответ

0 голосов
/ 31 октября 2018

Самый простой способ - использовать тип 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...