Golang——Json的序列化和反序列化

JSON:

  • JSON(JavaScript Object Notation):是一种轻量级的数据交换格式。 它是基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于计算机解析和生成,并有效的 提升网络传输效率。
  • Json易于机器解析和生成,并有效的提升网络传输效率,通常程序传输时会先将数据序列化成json字符串,接收方再反序列化成原数据类型
  • 所有的数据类型都可以通过Json表示
  • Json.cn这个网站可以验证Json格式
  • 序列化用json.Marshal()
  • 反序列化用json.Unmarshal(),反序列化时要和序列化前的数据类型保持一致

创建格式:

在这里插入图片描述

基本数据类型序列化:

func testBasic() {num := 1.111marshal, err := json.Marshal(num)if err != nil {fmt.Println("json.Marshal err:", err)}fmt.Println("序列化后:", string(marshal)) // 序列化后: 1.111
}

结构体序列化:

func main() {testStudent()
}
/**
type Student struct {Name     stringAge      intBirthday stringAddress  string
}
*/
// 如果加上`json:"student_name"`,序列化以后的数据字段是返回指定格式的,可以小写,json固定,后面的随意
type Student struct {// 变量首字母大写才能被解析Name     string `json:"student_name"`Age      int    `json:"student_age"`Birthday string `json:"student_birthday"`Address  string `json:"student_address"`
}func testStudent() {student := Student{Name:     "itzhuzhu",Age:      24,Birthday: "1998-01-01",Address:  "广州市天河区",}marshal, err := json.Marshal(&student)if err != nil {fmt.Println("json.Marshal err:", err)}fmt.Println("序列化后:", string(marshal)) // 序列化后:{"Name":"itzhuzhu","Age":24,"Birthday":"1998-01-01","Address":"广州市天河区"}
}

map序列化:

func testMap() {var m map[string]interface{}m = make(map[string]interface{})m["name"] = "韩信"m["age"] = 23m["address"] = "广州"marshal, err := json.Marshal(m)if err != nil {fmt.Println("json.Marshal err:", err)}fmt.Println("序列化后:", string(marshal)) // 序列化后: {"address":"广州","age":23,"name":"韩信"}
}

切片序列化:

func testSlice() {var slice []map[string]interface{}var m map[string]interface{}m = make(map[string]interface{})m["name"] = "韩信"m["age"] = 23m["address"] = "广州"slice = append(slice, m)marshal, err := json.Marshal(m)if err != nil {fmt.Println("json.Marshal err:", err)}fmt.Println("序列化后:", string(marshal)) // 序列化后: {"address":"广州","age":23,"name":"韩信"}
}

反序列化为结构体:

func deserialize() {str := "{\"Name\":\"itzhuzhu\",\"Age\":24,\"Birthday\":\"1998-01-01\",\"Address\":\"广州市天河区\"}"// 使用Unmarshal反序列化var student Studenterr := json.Unmarshal([]byte(str), &student)if err != nil {fmt.Println("json.Unmarshal err:", err)}fmt.Println("反序列化后:", student) // 反序列化后: {itzhuzhu 24 1998-01-01 广州市天河区}
}

反序列化为map:

func deserializeMap() {str := " {\"address\":\"广州\",\"age\":23,\"name\":\"韩信\"}"// 反序列化的时候不需要make,被封装到Unmarshal中了var m map[string]interface{}err := json.Unmarshal([]byte(str), &m)if err != nil {fmt.Println("json.Unmarshal err:", err)}fmt.Println("反序列化后:", m) // map[address:广州 age:23 name:韩信]
}

反序列化为切片:

func deserializeSlice() {str := " [{\"address\":\"广州\",\"age\":23,\"name\":\"韩信\"}]"var slice []map[string]interface{}err := json.Unmarshal([]byte(str), &slice)if err != nil {fmt.Println("json.Unmarshal err:", err)}fmt.Println("反序列化后:", slice) // 反序列化后: [map[address:广州 age:23 name:韩信]]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装配置 flannel - 每天5分钟玩转 Docker 容器技术(59)

上一节我们部署了 etcd,本节安装和配置 flannel。 build flannel flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 build。不过用于做 build 的 docker 镜像托管在 gcr.io,国内可能无法直接访问&a…

人人都是产品经理?

产品经理顾名思义就是产品经理。那么只要搞懂产品是什么、经理又什么什么,就明白了产品经理是什么。 产品是什么: 产品是满足需求的载体,能被市场、人们使用和消费,并能满足人们某种需求(创造价值)的任何东…

搭建一个简单的FTP服务器

本文介绍通过win7自带的IIS来搭建一个只能实现基本功能的FTP服务器,第一次装好WIN7后我愣是没整出来,后来查了一下网上资料经过试验后搭建成功,其实原理和步骤与windows前期的版本差不多,主要是对新的操作系统还不是很熟悉。相信用…

3D文档(BRD、MRD、PRD)怎么写

3D文档: 一般来说,BRD作为战略方向的制定,是最早产出的文档,而MRD则是在战略方向的基础上对市场进行的分析,同时对后续工作的方向进行一些说明和指导,也可以说是通过对市场环境、竞品的分析,明确…

需求收集、分析、管理的方法

需求: 什么是需求 百度百科给的解释:指人们在某一特定的时期内在各种可能的价格下愿意并且能够购买某个具体商品的需要。所以要想明白需求,还要明白另外两个概念,需要和欲望,因为从需要到需求是一个由宏观到微观的过程…

if函数 字体自动标红_发喜糖!REPT函数和图表订婚了~~

小伙伴们早上好呀!今天为大家分享的是REPT函数的应用实例。案例1:基础用法左右:按照给定的次数重复显示文本用法:REPT(文本,重复次数)搭配:Wingdings字体家族的应用案例2:条形图⑴ 单元格D3输入…

用户体验五要素

用户体验: 用户在使用产品过程中建立起来的一种纯主观感受。 用户体验的重要性: 会失去客户:如果你没有良好的体验,用户不会使用你的产品,而且产品很难有二次机会接触用户。会增加获客成本:获客成本越来越高…

trackingmore快递查询平台_国际快递物流信息追踪查询

以下是快递公司常用查询物流信息追踪平台1. 17TRACK查询网址:www.17track.net/zh-cn (强烈推荐,国际件都能查询)2. EMS查询网址:www.ems.com.cn 客服电话:11833. DHL网址查询:www.cn.dhl.com …

竞品分析该怎么做

竞品分析: 作用: 知己知彼,百战不殆。为自身产品设计提供功能、可用性、关键技术等方面的参考。提高自身产品的差异化程度。为新立项的产品、拍脑袋想出来的,降低风险。 如何选择竞品: 行业内领先的产品,通…

饿了么超时20分钟_饿了么回应“多等5分钟”,网友气炸了

广告记编辑整理(ID:adgroup)昨天一篇题为《外卖骑手,困在系统里》的文章刷屏文章指出外卖骑手是被平台系统算法与数据支配的“工具人”在系统的压迫下骑手们每天都在违反交规、与死神赛跑外卖员成了高危职业引发网友热议今天凌晨饿了么官方发布了一篇《你…

java获取本周的开始时间和结束时间_创业板注册制开始时间/股票开户流程结束后,怎么炒股?...

股户流程刚走完,先别急着炒股,多研究股市行情。首选开户选好券商,没选好后患无穷,券商建议是富途、老虎,这两家美股港股都可以入,各有优势,富途的港股股票期权值得关注,老虎证券目前…

MarkDown 中使用 LaTeX 数学式

 最近看了些机器学习的书籍, 想写点笔记记录下. 由于需要使用到很多的数学推导, 所以就看了下如何在 Markdown 中插入数学式,发现在 Markdown 中可以直接插入 LaTeX 数学式. 排版数学公式是 \(\TeX\) 系统设计的初衷, 在 \(\LaTeX\) 中占有特殊地位, 是…

信息架构、结构图、流程图

互联网信息架构: 信息架构的本质就是分类!按照一定的规则,对产品的功能和内容进行组织,在功能确定的情况下,合理地设置和摆放,建立尽可能短的使用路径。目的就是为了更高效的满足用户的使用需求。如不进行信…

api商品分享源码_谈谈微服务中的 API 网关(API Gateway)

在本篇文章中,我们就一起来探讨一下 API 网关在整个微服务分布式架构中的一个作用。# 背景我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有…

Docker(4)-容器互联与端口映射

容器互联 默认情况下,容器都是各自独立运行,与世隔绝。 Docker提供了一个名为docker0的虚拟网桥,它会为每个相连的容器分配一个虚拟子网。但是尽管容器都连在同一个虚拟网桥上,如果没有额外的配置,它们还是不能够相互通…

设计规范-导航、弹窗、视图

常见导航样式: 根据产品的特性,导航可以混合使用,体现形式多样化。 不能为了追求多样化,滥用导航类型。 扁平式导航: 在一级页面提供导航栏,一般处于顶部/底部,适合频繁切换的模块&#xff0c…

f3arra1n3.4.1版本_GDB 10.1版本发布了

更多互联网新鲜资讯、工作奇淫技巧关注原创【飞鱼在浪屿】(日更新)GDB的10.1版,即GNU调试器,现已发布。GDB是Ada,C,C ,Fortran,Go,Rust等许多源代码级的调试器。GDB可以定位(调试正在运行的程序…

使用密钥登录CentOS系统(基于密钥的认证)

在Window客户端有多种软件可以登陆ssh,比如putty,xshelll,secureCRT,我就以xshell为例设置使用公钥和私钥验证登陆服务器。 使用Xshell密钥认证机制远程登录Linux 1、使用xshell生成公钥 Key Type 选择RSA (SSH1只支持…

华为8545m5补全shell_华为hs8145v5 改华为界面和默认超密(一)

重点从电信界面改华为界面要点:修改配置文件必须要有 Root 权限,也就是要能登陆 Telnet 和补全 Shell 。开 Telnet 方法:1.需要有超密,登陆到电信管理页面,打开 Telnet 选项。在后台页面点击“安全”--->“ONT访问控…

小程序产品的特点

认识小程序: 小程序:一种不需要下载安装,即可使用的应用。 小程序的特点: 开发成本低。 流畅的使用体验。 庞大的流量池可供使用。 用完即走,不占用手机内存,但是有使用记录供用户可方便的再次找回产品。…