【Golang】十、基础篇 --- JSON序列化和反序列化

本文介绍了如何使用Go语言中的json包实现map、切片及结构体的序列化与反序列化操作。通过实例展示了不同数据类型的序列化过程,并解释了需要注意的事项,例如结构体字段的大写要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、序列化

(1)map 序列化

	// 初始化map
	var jsonMap map[string]interface{}
	jsonMap = make(map[string]interface{}, 2)
	jsonMap["项目"] = []int{111,2,2,2,2,3,44555}
	jsonMap["资源"] = []string{"哇哈哈", "万达"}

	// json.Marshal 序列化map
	mapstr, _ := json.Marshal(jsonMap)
	fmt.Println(string(mapstr))

输出:{"资源":["哇哈哈","万达"],"项目":[111,2,2,2,2,3,44555]}

(2)切片 序列化

	slice := make([]map[string]interface{}, 2, 4)
	jsonMap = make(map[string]interface{}, 2)
	jsonMap["项目"] = []int{111,2,2,2,2,3,44555}
	jsonMap["资源"] = []string{"哇哈哈", "万达"}
	slice[0] = jsonMap
	jsonMap = make(map[string]interface{}, 2)
	jsonMap["项目2"] = []int{111,2,2,2,2,3,44555}
	jsonMap["资源2"] = []string{"哇哈哈", "万达"}
	slice[1] = jsonMap

	// 切片序列化
	slicestr, _ := json.Marshal(slice)
	fmt.Println(string(slicestr))

输出:[{"资源":["哇哈哈","万达"],"项目":[111,2,2,2,2,3,44555]},{"资源2":["哇哈哈","万达"],"项目2":[111,2,2,2,2,3,44555]}]

(3)结构体 序列化

结构体序列化需要注意,字段都需要大写,小写字母开头其他包无法访问,导致无法序列化该字段

type name struct {
	Names [4]string `json:"names"`
	Age int `json:"age"`
}
func main(){
	// 序列化结构体
	names := name{[4]string{"1","2","3","4"}, 20}
	str, _ := json.Marshal(names)
	fmt.Println(string(str))
}

输出:{"names":["1","2","3","4"],"age":20}

二、反序列化

故名思意,反序列化就是将json字符串转化成对应的数据类型(如结构体、map、切片等等)的操作

接序列化操作,变量直接以上述变量进行引用

(1)map 反序列化

需要注意:json.Unmarshal()需要传递指针,因为在该方法内部会make,重新赋值!

	var jsonMap2 map[string]interface{}
	err2 := json.Unmarshal(mapstr, &jsonMap2)
	fmt.Println(jsonMap2, err2)

(2)切片 反序列化

	slice2 := make([]map[string]interface{}, 2, 4)
	err3 := json.Unmarshal(slicestr, &slice2)
	fmt.Println(slice2, err3)

(3)结构体 反序列化

	name := name{}
	err := json.Unmarshal(str, &name)
	if err != nil {
		fmt.Println("失败")
	}
	fmt.Println("成功:", name.Names, name.Age)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼小鱼啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值