golang中结构体转json存储,结构体成员首字母必须大写,否则无法输出该项值的问题
首先看一个首字母小写的非正常输出
package main
import(
"encoding/json"
"fmt"
)
typedef People struct{
name string `json:name`
}
func main(){
js := `{
"name" : "11"
}`
var p People
err := json.Unmarshal([]byte(js), &p)
if(nil != err){
fmt.Println("err:", err)
return
}
fmt.Println("people", p)
}
//运行结果为 people : {}
明显不是符合预期输出的 peple: {11}
当我们把People中name 成员变成 Name时,在运行结果就可以得到想要的答案 people :{11}
现在让我们分析一下原因
JSON输出的时候必须注意,只有导出的字段(首字母是大写)才会被输出,如果修改字段名,那么就会发现什么都不会输出,所以必须通过struct tag定义来实现。 针对JSON的输出,我们在定义struct tag的时候需要注意的几点是: - 字段的tag是"-",那么这个字段不会输出到JSON - tag中带有自定义名称,那么这个自定义名称会出现在JSON的字段名中 - tag中如果带有"omitempty"选项,那么如果该字段值为空,就不会输出到JSON串中 - 如果字段类型是bool, string, int, int64等,而tag中带有",string"选项,那么这个字段在输出到JSON的时候会把该字段对应的值转换成JSON字符串
本文探讨了Golang中结构体转JSON时遇到的问题:若结构体成员首字母为小写,则无法输出到JSON。文章详细解释了此现象的原因,并介绍了如何通过结构体标签正确配置以确保数据可以被序列化。

3486

被折叠的 条评论
为什么被折叠?



