加载json数组配置

时间:2017-07-18 02:35:34

标签: go

我想加载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()

这有什么问题吗?

2 个答案:

答案 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])
}