golang中结构体转json存储,结构体成员首字母必须大写,否则无法输出该项值的问题

本文探讨了Golang中结构体转JSON时遇到的问题:若结构体成员首字母为小写,则无法输出到JSON。文章详细解释了此现象的原因,并介绍了如何通过结构体标签正确配置以确保数据可以被序列化。

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字符串

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值