我很难理解为什么下面使用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
谢谢!
答案 0 :(得分:5)
我想您需要像这样传递一个指向配置的指针:
json.Unmarshal(byteValue, &configuration)
您还应该检查Unmarshal返回的错误值,例如:
err = json.Unmarshal(byteValue, &configuration)
if err != nil {
panic(err)
}
请参见the docs。