我想加载json配置文件去lang app。 配置数据是数组,因为它需要动态设置。
[ {“key”:“A”,“data”:[1,2,3]}, {“key”:“B”,“data”:[1,2]}, {“key”:“C”,“data”:[1,3]}]
并尝试像这样加载。
package main
import (
"flag"
"fmt"
"os"
"encoding/json"
)
type ColInfo struct {
key string `json:"key"`
col []int `json:"data"`
}
type Config struct {
colInfos []ColInfo
}
func main() {
flag.Parse()
file, _ := os.Open("col.conf")
decoder := json.Marshal(file)
configuration := Config{}
if err := decoder.Decode(&configuration); err != nil {
fmt.Println(err)
}
println( configuration.colInfos[0].key)
}
这是我遇到的错误
./ test2.go:23:单值上下文中的多值json.Marshal()
这有什么问题吗?
答案 0 :(得分:1)
您应该使用json.Unmarshal()
填充配置结构。
file, err := ioutil.ReadFile("./col.conf")
if err != nil {
fmt.Printf("File error: %v\n", err)
os.Exit(1)
}
cfg := Config{}
json.Unmarshal(file, &cfg)
答案 1 :(得分:1)
您需要更改“ColInfo”结构键,以便“json”包可以读取它们。我正在附上一个有效的代码片段
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
type ColInfo struct {
Key string `json:"key"`
Col []int `json:"data"`
}
type Config struct {
colInfos []ColInfo
}
func main() {
file, err := ioutil.ReadFile("configurtaion.txt")
if err != nil {
fmt.Printf("File error: %v\n", err)
os.Exit(1)
}
cfg := Config{}
json.Unmarshal(file, &cfg.colInfos)
fmt.Println(cfg.colInfos[0])
}