我有以下代码:
package main
import "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.
您可以运行此代码in the golang playground。
因为我在结构和JSON中设置了num
属性并且它们都是字符串,所以我希望dat
结构具有num
属性,与'hello'
,但它没有。
我做错了什么?在我的心理模型中,这应该如何工作是不正确的?
修改
我尝试将json
签名添加到结构中,但它没有任何区别(不知道它实际上是做什么的)。
type SuperNum struct {
num string `json:"num"`
}
答案 0 :(得分:4)
num
不会导出,因为它是小写的。将其更改为Num
,您就可以检查结果了。
type SuperNum struct {
Num string
}
答案 1 :(得分:2)
只需将num
更改为Num
即可。结构的小写属性不可见。
答案 2 :(得分:1)
当解组JSON结构时,您映射的属性必须是公共的(请记住,在Go中,结构和模块成员的公共和私有可见性由成员的名称为高或低表示骆驼案。
所以,首先,你的结构必须这样定义:
type SuperNum struct {
Num string // <- note the capital "N"
}
使用此结构,JSON编组器将期望JSON属性也被命名为Num
。要配置不同的属性名称(如示例中的小写num
),请对该结构成员使用json
注释:
type SuperNum struct {
Num string `json:"num"`
}