带你玩转go语言中的json

本文详细介绍了在Go语言中如何进行JSON的序列化与反序列化操作,包括标准序列化流程、自定义字段名称、忽略特定字段及处理字符串格式的数字等关键知识点。

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

前言:java和go 我们都会遇到序列化以及反序列化,本次 介绍关于GO语言中json与结构体的各种处理.

一:标准的序列化和反序列化

type Student struct {
	Id     int64
	Name   string
	Age    int64

}

func main() {
	s1 := Student{
		Id:     1,
		Name:   "红孩儿",
		Age:    18,

	}
	 //序列化
	b, err := json.Marshal(s1)
	if err != nil {
		fmt.Printf("json序列化失败, err:%v\n", err)
		return
	}
	fmt.Printf("s1:%s\n", b)


	var s2 Student
	//反序列化
	err = json.Unmarshal(b, &s2)
	if err != nil {
		fmt.Printf("json反序列化失败, err:%v\n", err)
		return
	}
	fmt.Printf("s2:%v\n", s2)
}

打印结果:

从上面我们可以看到,    序列化与反序列化默认情况下使用结构体的字段名,但是有时候我们需要自定义名称,这个时候 就需要使用TagTag是结构体的元信息,可以在运行的时候通过反射的机制读取出来.我们现在修改下结构体Student

在运行项目 查看:

二. 就是忽略某个字段   以及忽略掉一些空值字段 

首先我们看name 我们已经被忽略掉 所以打印没有name的字段,在看 id 我们没有这个 但是 为什么打印会有id的值呢?因为 结构体中的字段没有值时,json 序列化的时候会默认输出字段的类型零值;intfloat类型是 0,string类型是"",而对象类型是 nil)

但是 ,有时候 我们偏偏不想要这些没有值的字段,那么 我们就需要添加一个字段,omitempty

此时 就可以达到我们的要求了.

三:如何解决字符串格式的数字

开发过程中经常性会发生前端在传递来的json数据中可能会使用字符串类型的数字,如下截图 我们执行 就会报错,这个时候 我们只要在结构体里面添加一个string 就可以解决问题

1)未加string 报错

2)加string

可以看到此时没有报错.完美解决掉.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值