英文:
Load json array configuration
问题
我想要将 JSON 配置文件加载到 Go 语言应用程序中。
配置数据是一个数组,因为它需要动态设置。
[
{ "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.NewDecoder(file)
configuration := Config{}
if err := decoder.Decode(&configuration); err != nil {
fmt.Println(err)
}
fmt.Println(configuration.colInfos[0].key)
}
这是我得到的错误:
./test2.go:23: multiple-value json.Marshal() in single-value context
我在哪里出错了?
英文:
I would like to load json configuration file to go lang app.
Configuration data is array since it needs to be dynamically set.
> [
> { "key": "A", "data": [1, 2, 3]},
> { "key": "B", "data": [1, 2]},
> { "key": "C", "data": [1, 3]} ]
And tried to load like this.
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)
}
Here is error I've got
> ./test2.go:23: multiple-value json.Marshal() in single-value context
What am i wrong with this?
答案1
得分: 1
你应该使用json.Unmarshal()
来填充你的配置结构体。
file, err := ioutil.ReadFile("./col.conf")
if err != nil {
fmt.Printf("文件错误:%v\n", err)
os.Exit(1)
}
cfg := Config{}
json.Unmarshal(file, &cfg)
英文:
You should use json.Unmarshal()
to populate your config struct.
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)
答案2
得分: 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])
}
请注意,我已经将结构体中的colInfos
改为了ColInfos
,以符合Go语言的命名约定。
英文:
You need to change your "ColInfo" struct keys so that "json" package can read them. I'm attaching a working code snippet
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])
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论