JSON 序列化和反序列化 In Go

xjtuhit · · 6703 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

基础语法

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

  • 序列化:

image

  • 反序列化:

image

简单的例子

image

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

image

在这个列子中,我们使用 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 数据类型对照表

image

例如:

image

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

image

自定义数据类型

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

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

image

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

image

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

image

组合示例

image

实战练习

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

数据准备

image

反序列化

image

运行代码输出结果为:

image

序列化

image

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

image

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

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

¥1999 倒计时3天

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

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


有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:xjtuhit

查看原文:JSON 序列化和反序列化 In Go

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

6703 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传