json 反序列化 父子类型_JSON 序列化和反序列化 In Go

11b6393a7e1fb6e7f9216a1604ef331b.png

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

基础语法

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

  • 序列化:

d6e01aa4b7379c7b43ba0e0b53a974cf.png
  • 反序列化:

1155919cf25c267391368131783f1621.png

简单的例子

1dd7b0b08c96899d03e90e831fc00c62.png

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

c6420a677b4028c3ddfda6419d17b818.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 数据类型对照表

d860f5acc03396b97a23ec13eb0f21a8.png

例如:

0392e8eedab6fd53399c52a4f1045c98.png

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

edaf36a68578fee954d7653833b60450.png

自定义数据类型

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

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

63a7e12800fb1038731e44a205dd9e80.png

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

12fa921b682b0ef1427a6b1b7db24eb9.png

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

2b19a71b74cf24472186bfa0c1abf413.png

组合示例

f02e92df753bfd0ee24ba619acb4555e.png

实战练习

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

数据准备

d661b3fdd0492f7aac35d63821310edc.png

反序列化

556819303177260b8ea1a8aa5b2b7273.png

运行代码输出结果为:

f8f20667d02c9a0e6015a7afa99b74f0.png

序列化

676e099587cc2cd6f42d47dbdfc72bb8.png

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

f0ace76db7f95bfd344a2a2e36ae572c.png

Python 运维开发——18天训练营

本课程为:网络班+面授班(北京)

第一:¥1299 仅剩2天

第二:开课时间 5月12日

第三:为期18天(每周一天)

主讲师:

Panda :曾就职于豆瓣,某互联网医疗企业运维负责人

Monkey :曾就职爱奇艺,某在线教育独角兽企业运维研发负责人

训练大纲

Day1-Day4 Python 基础

● 基础语法 + 数据类型+文件处理

Day5-Day6 Python 进阶

● 函数式编程 + 面向对象 + 多线程

Day7-Day10 Django Web 开发入门

● Django MTV + Django Admin + Bootstrap/jQuery

Day11-Day18 项目实战

● 用户权限管理系统+ 多云管理 CMDB 系统 + 运维工单系统 + 代码发布系统

报名方式

添加小助手WeChat:17812796384,回复【18天训练营】

4bb5a55dd34319a20cab232bd4bc0987.png

Golang 课程5月开课,想要学习的小伙伴抓紧时间,早报名享受早鸟价

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值