英文:
Mapping a multiple dimensional JSON file to a Go struct
问题
快速而简单的问题,但让我感到困惑。
Sophie.conf
{
"host": {
"domain": "localhost",
"port": 5000
}
}
main.go
...
type Config struct {
domain string `json:"host.domain"`
port int `json:"host.port"`
}
...
func loadConfig() {
buffer, _ := ioutil.ReadFile(DEFAULT_CONFIG_FILE)
fmt.Println(string(buffer))
json.Unmarshal(buffer, &cfg)
}
...
然而,这样做不起作用,如果我使用以下代码打印:
fmt.Printf("host: %s:%d\n", cfg.domain, cfg.port)
输出结果为:
host: :0
我应该如何正确地实现这个功能?谢谢!
英文:
Quick and easy question no doubt, but one that has me stumped.
Sophie.conf
{
"host": {
"domain": "localhost",
"port": 5000
}
}
main.go
...
type Config struct {
domain string `json:"host.domain"`
port int `json:"host.port"`
}
...
func loadConfig() {
buffer, _ := ioutil.ReadFile(DEFAULT_CONFIG_FILE)
fmt.Println(string(buffer))
json.Unmarshal(buffer, &cfg)
}
...
That doesn't work though, if I print with
fmt.Printf("host: %s:%d\n", cfg.domain, cfg.port)
The output is:
host: :0
How would I do this properly? Thanks!
答案1
得分: 3
在你的情况下,你应该声明外部的Config
结构体。在其中,你应该定义Host
字段,就像我示例中的匿名结构体一样,但你也可以将其提取为显式结构体。
需要注意的是,你的结构体字段应该是可导出的(大写字母开头的名称),否则json.Unmarshal
(或json.Marshal
)将无法正确处理数据,你可以在Play Golang上尝试使用字段。
package main
import (
"encoding/json"
"fmt"
)
const jsonDocument = `
{
"host": {
"domain": "localhost",
"port": 5000
}
}
`
type Config struct {
Host struct {
Domain string
Port int
}
}
func main() {
cfg := &Config{}
json.Unmarshal([]byte(jsonDocument), cfg)
fmt.Printf("host: %s:%d\n", cfg.Host.Domain, cfg.Host.Port)
}
以上是你要翻译的内容。
英文:
In your case you should declare outer Config
struct. Inside it you should define Host
field, in my example it is anonymous struct, but you can extract it as explicit struct.
One note — you structs' fields should be exported (Upper Case name), or json.Unmarshal
(or json.Marshal
) will fail to process data properly, you could experiment with fields on Play Golang.
http://play.golang.org/p/msu73bwXNb
package main
import (
"encoding/json"
"fmt"
)
const jsonDocument = `
{
"host": {
"domain": "localhost",
"port": 5000
}
}
`
type Config struct {
Host struct {
Domain string
Port int
}
}
func main() {
cfg := &Config{}
json.Unmarshal([]byte(jsonDocument), cfg)
fmt.Printf("host: %s:%d\n", cfg.Host.Domain, cfg.Host.Port)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论