我有以下代码:package mainimport "encoding/json"import "fmt"type SuperNum struct { num string}func main() { byt := []byte(`{"num":"6.13"}`) var dat SuperNum if err := json.Unmarshal(byt, &dat); err != nil { panic(err) } fmt.Printf("%+v", dat) // I expect this to have a `num` attribute}输出:{num:}Program exited.您可以在 golang playground 中运行此代码。因为我num在结构体和 JSON 中设置了一个属性,而且它们都是字符串,所以我希望dat结构体有一个num属性 with 'hello',但它没有。我究竟做错了什么?在我关于这应该如何工作的心理模型中,什么是不正确的?编辑我尝试将json签名添加到结构中,但没有任何区别(不知道实际上是做什么的)。type SuperNum struct { num string `json:"num"`}
3 回答
慕虎7371278
TA贡献1802条经验 获得超4个赞
在解组 JSON 结构时,您映射的属性必须是公共的(请记住,在 Go 中,结构和模块成员的公共和私有可见性由成员名称表示为大写或小写的驼峰式。
因此,首先,您的结构必须像这样定义:
type SuperNum struct {
Num string // <- note the capital "N"
}
使用此结构,JSON 编组器将期望 JSON 属性也命名为Num。为了配置不同的属性名称(如num示例中的小写),请使用该json结构成员的注释:
type SuperNum struct {
Num string `json:"num"`
}
- 3 回答
- 0 关注
- 150 浏览
添加回答
举报
0/150
提交
取消