go json转换实践中遇到的坑

2019-11-10 12:22:15王振洲

可以看到,使用 json:"-" 标签的字段都被忽略了。

补充:golang string转json的一些坑

先看一段代码,起作用是把字符串转换为结构体对应的json

type people struct {

 name string `json:"name"`

 age int `json:"age"`

 id int `json:"id"`

}

 

type student struct {

 people

 id int `json:"sid"`

}

 

func main() {

 msg := "{"name":"zhangsan", "age":18, "id":122463, "sid":122464}"

 var someOne student

 if err := json.Unmarshal([]byte(msg), &someOne); err == nil {

  fmt.Println(someOne)

  fmt.Println(someOne.people)

 } else {

  fmt.Println(err)

 }

}

仔细看看,有没有错?我只能说,这样是输出不出来答案的,赋值错误,看下面的运行结果:

伤脑筋啊,我仔细看了半天,发现在定义的people和student两个结构体下边有绿色的波浪线(我用的vscode),像下边这样:

鼠标放上去显示的是:

大家都知道,golang中变量声明成大写和小写能引用的范围是不一样的,那我就想了,大小写问题???一脸懵逼把变量名首字母改成了大写,然后...就行了,代码变成了下边这样:

type people struct {

 Name string `json:"name"`

 Age int `json:"age"`

 ID int `json:"id"`

}

 

type student struct {

 people

 ID int `json:"sid"`

}

 

func main() {

 msg := "{"name":"zhangsan", "age":18, "id":122463, "sid":122464}"

 var someOne student

 if err := json.Unmarshal([]byte(msg), &someOne); err == nil {

  fmt.Println(someOne)

  fmt.Println(someOne.people)

 } else {

  fmt.Println(err)

 }

} 

输出的结果这样:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易采站长站。