json解组不工作,但解码

时间:2018-09-14 00:34:34

标签: json go

我很难理解为什么下面使用unmarshal方法的代码不起作用,但是后来我用NewDecoder编写的代码几乎一样,并且可以找到。

package conf

import (
    "os"
    "io/ioutil"
    "encoding/json"
)

type Configuration struct {
    Agents []Agent `json:"agents"`
    IbmWmqFolder string `json:"ibmWmqFolder"`
}

type Agent struct {
    AgentName string `json:"agentName"`
    Folders []string `json:"folders"`
}

func LoadConfiguration() (configuration Configuration) {
    jsonFile, err := os.Open("config.json")
    if err != nil {
        panic(err)
    }
    defer jsonFile.Close()
    byteValue, _ := ioutil.ReadAll(jsonFile)
    json.Unmarshal(byteValue, configuration)
    return
}

但是,如果我都做同样的事情,而不是使用byteValue和解组本身来完成最后两行,而是使用解码器,那么它将起作用,

jsonParser := json.NewDecoder(jsonFile)
jsonParser.Decode(&configuration)
return

谢谢!

1 个答案:

答案 0 :(得分:5)

我想您需要像这样传递一个指向配置的指针:

json.Unmarshal(byteValue, &configuration)

您还应该检查Unmarshal返回的错误值,例如:

err = json.Unmarshal(byteValue, &configuration)
if err != nil {
    panic(err)
}

请参见the docs