Go json.Unmarshal returns false 结构
Go json.Unmarshal returns false struct
Golang新手在此
我正在尝试从一个 .json 文件(与 Go 代码在同一目录中)解析为一个包含其他结构的结构,我最接近成功的是一个包含布尔值 false 的结构,这对我来说听起来很糟糕。
这是我目前的 Go 代码
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
)
type App struct {
Name string `json:"app:name"`
}
type Database struct {
Type string `json:"database:type"`
Name string `json:"database:name"`
User string `json:"database:user"`
Password string `json:"database:password"`
}
type Environment struct {
Mode string `json:"environment:mode"`
Debug bool `json:"environment:debug"`
}
type Config struct {
Environment Environment
App App
Database Database
}
func main() {
config, err := ioutil.ReadFile("config.json")
if err != nil {
fmt.Errorf("Error reading config file: %s", err)
}
var appSettings Config
json.Unmarshal(config, &appSettings)
fmt.Print(appSettings)
}
这是我的 .json 文件的内容
{
"App": {
"Name": "My_Project"
},
"Database": {
"Type": "postgres",
"Name": "my_project_db_name",
"User": "my_project_db_user",
"Password": "secret"
},
"Environment": {
"Mode": "development",
"Debug": true
}
}
编辑:
这是 main()
末尾的打印结果
{{ false} {} { }}
我已经验证了 json 内容,没问题。正在导出结构名称和属性。你能看出我做错了什么吗?
你能试试这样改吗:
type App struct {
Name string `json:"name"`
}
type Database struct {
Type string `json:"type"`
Name string `json:"name"`
User string `json:"user"`
Password string `json:"password"`
}
type Environment struct {
Mode string `json:"mode"`
Debug bool `json:"debug"`
}
这是输出:
{{development true} {My_Project} {postgres my_project_db_name my_project_db_user secret}}
这里有一些方便参考的小文档:
// Field is ignored by this package.
Field int `json:"-"`
// Field appears in JSON as key "myName".
Field int `json:"myName"`
// Field appears in JSON as key "myName" and
// the field is omitted from the object if its value is empty,
// as defined above.
Field int `json:"myName,omitempty"`
// Field appears in JSON as key "Field" (the default), but
// the field is skipped if empty.
// Note the leading comma.
Field int `json:",omitempty"`
Golang新手在此
我正在尝试从一个 .json 文件(与 Go 代码在同一目录中)解析为一个包含其他结构的结构,我最接近成功的是一个包含布尔值 false 的结构,这对我来说听起来很糟糕。
这是我目前的 Go 代码
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
)
type App struct {
Name string `json:"app:name"`
}
type Database struct {
Type string `json:"database:type"`
Name string `json:"database:name"`
User string `json:"database:user"`
Password string `json:"database:password"`
}
type Environment struct {
Mode string `json:"environment:mode"`
Debug bool `json:"environment:debug"`
}
type Config struct {
Environment Environment
App App
Database Database
}
func main() {
config, err := ioutil.ReadFile("config.json")
if err != nil {
fmt.Errorf("Error reading config file: %s", err)
}
var appSettings Config
json.Unmarshal(config, &appSettings)
fmt.Print(appSettings)
}
这是我的 .json 文件的内容
{
"App": {
"Name": "My_Project"
},
"Database": {
"Type": "postgres",
"Name": "my_project_db_name",
"User": "my_project_db_user",
"Password": "secret"
},
"Environment": {
"Mode": "development",
"Debug": true
}
}
编辑:
这是 main()
{{ false} {} { }}
我已经验证了 json 内容,没问题。正在导出结构名称和属性。你能看出我做错了什么吗?
你能试试这样改吗:
type App struct {
Name string `json:"name"`
}
type Database struct {
Type string `json:"type"`
Name string `json:"name"`
User string `json:"user"`
Password string `json:"password"`
}
type Environment struct {
Mode string `json:"mode"`
Debug bool `json:"debug"`
}
这是输出:
{{development true} {My_Project} {postgres my_project_db_name my_project_db_user secret}}
这里有一些方便参考的小文档:
// Field is ignored by this package.
Field int `json:"-"`
// Field appears in JSON as key "myName".
Field int `json:"myName"`
// Field appears in JSON as key "myName" and
// the field is omitted from the object if its value is empty,
// as defined above.
Field int `json:"myName,omitempty"`
// Field appears in JSON as key "Field" (the default), but
// the field is skipped if empty.
// Note the leading comma.
Field int `json:",omitempty"`