为了账号安全,请及时绑定邮箱和手机立即绑定

JSON Unmarshall 无法按预期与结构一起工作

JSON Unmarshall 无法按预期与结构一起工作

Go
长风秋雁 2021-12-06 15:01:39
我有以下代码: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 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

num按照惯例不导出,因为它是小写的。将其更改为Num,您就可以检查结果。


type SuperNum struct {

    Num string


查看完整回答
反对 回复 2021-12-06
?
桃花长相依

TA贡献1860条经验 获得超8个赞

只需更改numNum. 结构的小写属性不可见。

Go playground


查看完整回答
反对 回复 2021-12-06
?
慕虎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"`

}


查看完整回答
反对 回复 2021-12-06
  • 3 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信