Как загрузить файл .json в рекурсивную структуру с глубокой иерархией с помощью GO - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь загрузить файл конфигурации (config.json) в структуру go. Я использую ресурс "json.Unmarshal" для десериализации. Однако структура никогда не загружает полную иерархию, ограничивая структуру на втором уровне.

Это мои структуры

//ConfigurationsMQ struct data
type ConfigurationsMQ struct {
    Rabbitmq RabbitMQ `json:"rabbitmq"`
}

//RabbitMQ struct data
    type RabbitMQ struct {
    Connections ConnectionsMQ `json:"connections"`
}

//ConnectionsMQ provide a array of connections profile
type ConnectionsMQ struct {
    Production ConnectionInfo `json:"production"`
    Local      ConnectionInfo `json:"local"`
}

//ConnectionInfo stores data to RabbitMQ connection
type ConnectionInfo struct {
    ConnectionName string `json:"ConnectionName"`
    ServerIP       string `json:"ServerIP"`
    ServerPort     string `json:"ServerPort"`
    ServerUsername string `json:"ServerUsername"`
    ServerPassword string `json:"ServerPassword"`
}

Это функция, которая делает работу

//OpenConfig return the config structure
func OpenConfig() ConfigurationsMQ {
    byt, err := ioutil.ReadFile("./Utils/config.json")
    AddLog("open file action", err, true)

    var conf ConfigurationsMQ
    errJSON := json.Unmarshal(byt, &conf)
    AddLog("Unmarshal a Json file", errJSON, true)

    return conf
}

Используемый JSON

${
    "rabbitmq": {
        "connections":{
            "local":{ 
                    "ConnectionName":"Local",
                    "ServerIP" : "127.0.0.1",
                    "ServerPort": "5672",
                    "ServerUsername" : "guest",
                    "ServerPassword" : "guest"
                },
                "production":{ 
                    "ConnectionName":"Local",
                    "ServerIP" : "127.0.0.1",
                    "ServerPort": "5672",
                    "ServerUsername" : "guest",
                    "ServerPassword" : "guest"
                }
        }
    }
}

Ondrive Print

Я только что попробовал много советов, которые нашел гугл: пересмотренные имена в нижнем / верхнем регистре; использование указателей; Я изменил порядок объявлений и протестировал сотни способов монтирования структуры. Использование json только с двумя уровнями работает нормально.

...