当前位置:网站首页>go语言序列化和反序列化及序列化后的json为空和json的key值大写如何改为小写问题
go语言序列化和反序列化及序列化后的json为空和json的key值大写如何改为小写问题
2022-07-29 23:31:00 【ydl1128】
go语言序列化
定义嵌套结构体
type Animal struct {
Name string
}
type Person2 struct {
Name string
Age int
Animal Animal
}
使用序列化的包
func main() {
p:= Person2{
Name: "小花",
Age: 121,
Animal: Animal{
Name: "旺财",
},
}
json, err := json.Marshal(&p)
if err !=nil{
panic("error!!!")
}
fmt.Printf(string(json))
}
结果:
{“Name”:“小花”,“Age”:121,“Animal”:{“Name”:“旺财”}}
关于go中序列化之后的json数据为空和json数据的key是大写如何改为小写的问题
假设在上述结构体中,我们给所有的成员变量都是小写开头,只有Animal是大写。那么序列化之后的值就是:
{“”,“Animal”:{}}.
在go语言中小写开头的变量是私有的,大写开头的变量是共有的。把person传入序列化的包中,那么就不是同一个包了,因此访问不到,序列化也就是null。
解决办法:
把变量名改为大写即可。
优化:因为大写不符合书写的规范。因此我们想要拿到属性名是小写的json数据。那么该如何做的?
//在对应的属性名之后加上`json:"字段名"`。这里的字段名就是解析之后的json的key值
type Person2 struct {
Name string `json:"name"`
Age int `json:"age"`
Animal Animal
}
运行结果:
{“name”:“小花”,“age”:121,“Animal”:{“Name”:“旺财”}}。
so 神奇!
go语言反序列化
调用Unmarshal包,帮我转化为指定的结构体数据
我们先把结构小改一下:
type Person2 struct {
Name string `json:"name"`
Age int `json:"age"`
Animal []Animal
}
反序列化成指定的结构体:
str := `{"Name":"小花","Age":121,"Animal":[{"Name":"旺财"},{"Name":"旺财2"}]}`
c1 := &Person2{
}
err := json.Unmarshal([]byte(str), c1)
if err != nil {
fmt.Println("json unmarshal failed!")
return
}
fmt.Printf("%v",*c1)
打印的结果:
{小花 121 [{旺财} {旺财2}]}
边栏推荐
猜你喜欢

Another new rule for credit cards is coming!Juphoon uses technology to boost the financial industry to improve service quality and efficiency

树莓派上安装 wiringPi 2.6 解决 gpio readall 命令的错误

DNA修饰纳米金颗粒|DNA脱氧核糖核酸偶联修饰碳纳米材料|实验原理

idea设置自动去除未引用(不再引用)的引用
![[leetcode] 75. Color classification (medium) (double pointer, in-situ modification)](/img/0e/e4ed76902194755a3b075a73f272f3.png)
[leetcode] 75. Color classification (medium) (double pointer, in-situ modification)

能源企业数字化转型背景下的数据安全治理实践路径

新标杆!美创科技助力广西桂林某三甲医院实现勒索病毒主动防御

DNA修饰的上转换纳米材料|聚胞苷酸Poly-C DNA修饰的氧化石墨烯|解析说明

Windows 安装 MySQL 5.7详细步骤

【openlayers】Map【1】
随机推荐
【openlayers】Map【1】
JetsonNano learning (5) JetsonNano installs PyTorch and Torchvision
【openlayers】地图【二】
Hell Diggers Series #1
子无序测试
全国双非院校考研信息汇总整理 Part.6
DNA脱氧核糖核酸修饰四氧化三铁|DNA修饰氧化锌|使用方法
The latest Gansu construction welder (construction special operation) simulation question bank and answer analysis in 2022
【leetcode】The sword refers to Offer II 002. Binary addition
一文看懂拉格朗日乘子法、KKT条件和对偶问题
【leetcode】82. 删除排序链表中的重复元素 II(中等)
微信小程序滑动导航栏(网页浮动窗口怎么设置)
Access Modbus TCP and Modbus RTU protocol devices using Neuron
桌面软件开发框架大赏
jenkins搭建部署详细步骤
devops学习(九) Helm工具--持续部署
How to make labview an application (labview program recognizes shapes)
接口测试的概念、目的、流程、测试方法有哪些?
MySQL六脉神剑,SQL通关大总结
devops学习(八) 搭建镜像仓库---jenkins推送镜像