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

我有以下代码:


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.

您可以在 golang playground 中运行此代码。


因为我num在结构体和 JSON 中设置了一个属性,而且它们都是字符串,所以我希望dat结构体有一个num属性 with 'hello',但它没有。


我究竟做错了什么?在我关于这应该如何工作的心理模型中,什么是不正确的?


编辑


我尝试将json签名添加到结构中,但没有任何区别(不知道实际上是做什么的)。


type SuperNum struct {

    num string `json:"num"`

}


长风秋雁
浏览 151回答 3
3回答

函数式编程

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

桃花长相依

只需更改num为Num. 结构的小写属性不可见。Go playground

慕虎7371278

在解组 JSON 结构时,您映射的属性必须是公共的(请记住,在 Go 中,结构和模块成员的公共和私有可见性由成员名称表示为大写或小写的驼峰式。因此,首先,您的结构必须像这样定义:type SuperNum struct {&nbsp; &nbsp; Num string&nbsp; // <- note the capital "N"}使用此结构,JSON 编组器将期望 JSON 属性也命名为Num。为了配置不同的属性名称(如num示例中的小写),请使用该json结构成员的注释:type SuperNum struct {&nbsp; &nbsp; Num string `json:"num"`}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go