json序列化_JSON 序列化和反序列化 In Go

笔者之前有写过关于 xml 的使用文章,今天来给大家介绍关于数据序列化和反序列化的一种常见方式 JSON. 尤其是在 http,rpc 的微服务调用中。

基础语法

在 Go 中我们主要使用官方的 encoding/json 包对 json 数据进行序列化和反序列化,主要使用方法有:

  • 序列化:
1b8da6944242add0bc37832404d6bd40.png
  • 反序列化:
0dbd08f371df5284db30709cfec5fc14.png

简单的例子

d9d1c1a5b7e0d2575844f1245ab979fd.png

当我们运行代码的时候可以得到如下输出结果:

fc60c62ef18f898ac6e00c15ecd0edc8.png

在这个列子中,我们使用 unmarshalmarshal 将一个整数的 JSON 二进制转化为 go int 数据

注意:在实际应用中,我们在序列化和反序列化的时候,需要检查函数返回的 err,如果 err 不为空,表示数据转化失败。

例如:我们把上面例子中 value 类型由 int 修改为 string 后再次运行代码,你将得到 unmarshal error is:json:cannot unmarshal number into Go value of type string 的错误提醒。

数据对应关系

JSON 和 Go 数据类型对照表

a08e054d2e0f579c135a4fb363437c30.png

例如:

dad1d02a93d209a368466b0632688cda.png

运行代码我们可以得到如下输出结果

1082e55d1303d0c45a903a7172dd540b.png

自定义数据类型

除了使用上面基础数据外,对于那些比较复杂的数据集合(Object),我们还可以使用自定义数据类型 struct 来转化。

Go 中关于 JSON 转化字段名的对应语法为:

b95891d888c04ea6afa366e53d6871e0.png

如果我们想忽略那些空值的字段,我们可以使用 omitempty 选项:

0ef8a992cbf1e8b6fa5c063d0880d114.png

如果我们想忽略特定字段:

6b18e0b89cc9ed31c2df0e6b7a20fe84.png

组合示例

aa6dec53b22f1df8a32b3c6e8faed0eb.png

实战练习

假如我们有这一样一段 JSON 数据,它表示一个学生的考试成绩,下面我们就来看看在 Go 中如何序列化和反序列化。

数据准备

a54f61dc70823fa3ce253d116ff4a97d.png

反序列化

4c93cafa962de39293d7fc58c5379872.png

运行代码输出结果为:

57c2b7636e830da4ae6bb01050def2c4.png

序列化

815f6d0abf3b1b7e0e4938cc238de1be.png

当我们运行代码后,打开 data2.json 文件。将看到如下内容:

32ba90100d489a1e59851fb94252e988.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值