如何使用GO将.json文件加载到深度层次结构递归结构中

时间:2019-01-24 21:30:31

标签: json go struct unmarshalling

我正在尝试将配置文件(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

我只是尝试了很多使用Google搜索功能的技巧:修改了大小写名称;使用指针;我更改了声明的顺序,并测试了数百种安装结构的方法。 仅使用两个级别的json即可正常工作。

0 个答案:

没有答案