Я пытаюсь загрузить файл конфигурации (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 только с двумя уровнями работает нормально.