当前位置:网站首页>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}]}
边栏推荐
猜你喜欢

The Sandbox Partners with Gravity to Bring RO Ragnarok to the Metaverse

idea设置自动去除未引用(不再引用)的引用

devops学习(三) K8环境部署jenkins

线上无序的

高数下|三重积分的计算3|高数叔|手写笔记
![[leetcode] 82. Delete duplicate elements in sorted linked list II (medium)](/img/93/a744cfc059245de2fc07894167f3c5.png)
[leetcode] 82. Delete duplicate elements in sorted linked list II (medium)

DNA修饰碱基5-甲基胞嘧啶和8-羟基鸟嘌呤|DNA修饰量子点|规格信息

Design for failure 12 common design ideas

Mysql8.0新特性之详细版本

Huawei 14 Days - (3) Kernel Development
随机推荐
MySQL事务(transaction) (有这篇就足够了..)
全国双非院校考研信息汇总整理 Part.1
【leetcode】The sword refers to Offer II 002. Binary addition
SAP ABAP Netweaver 容器化的一些前沿性研究工作分享
C语言初阶-初识C语言
Huawei 14 Days - (3) Kernel Development
MySQL六脉神剑,SQL通关大总结
[2023 School Recruitment Questions] Summary of knowledge points and hand-tear code in the written test and interview
桌面软件开发框架大赏
idea设置自动去除未引用(不再引用)的引用
Brute force recursion to dynamic programming 04 (digital string conversion)
Android 11 : 隐私和安全
devops学习(五) Jenkins 简单完成持续部署
重写并自定义依赖的原生的Bean方法
管理区解耦架构见过吗?能帮客户解决大难题的
Guidelines for the Release of New WeChat Mini Programs
DNA脱氧核糖核酸修饰石墨粉末|DNA修饰还原石墨烯功能材料|保存温度
全国双非院校考研信息汇总整理 Part.7
Gao Shu Xia|Triple Integral Exercises|Uncle Gao Shu|Handwritten Notes
Super RVRT