带你玩转go语言中的json

前言: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

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

猜你喜欢

转载自blog.csdn.net/FindHuni/article/details/105681805