笔者之前有写过关于 xml 的使用文章,今天来给大家介绍关于数据序列化和反序列化的一种常见方式 JSON. 尤其是在 http,rpc 的微服务调用中。
基础语法
在 Go 中我们主要使用官方的 encoding/json 包对 json 数据进行序列化和反序列化,主要使用方法有:
- 序列化:
- 反序列化:
简单的例子
当我们运行代码的时候可以得到如下输出结果:
在这个列子中,我们使用 unmarshal 和 marshal 将一个整数的 JSON 二进制转化为 go int 数据
注意:在实际应用中,我们在序列化和反序列化的时候,需要检查函数返回的 err,如果 err 不为空,表示数据转化失败。
例如:我们把上面例子中 value 类型由 int 修改为 string 后再次运行代码,你将得到 unmarshal error is:json:cannot unmarshal number into Go value of type string 的错误提醒。
数据对应关系
JSON 和 Go 数据类型对照表
例如:
运行代码我们可以得到如下输出结果
自定义数据类型
除了使用上面基础数据外,对于那些比较复杂的数据集合(Object),我们还可以使用自定义数据类型 struct 来转化。
Go 中关于 JSON 转化字段名的对应语法为:
如果我们想忽略那些空值的字段,我们可以使用 omitempty 选项:
如果我们想忽略特定字段:
组合示例
实战练习
假如我们有这一样一段 JSON 数据,它表示一个学生的考试成绩,下面我们就来看看在 Go 中如何序列化和反序列化。
数据准备
反序列化
运行代码输出结果为:
序列化
当我们运行代码后,打开 data2.json 文件。将看到如下内容: