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…

Golang——单元测试testing

Go语言中带有一个轻量级的测试框架testing和go test命令来实现单元测试及性能测试。单元测试可以解决 确保每个函数都是可运行且结果正确确保代码性能完好单元测试可以及时发现程序设计或实现的逻辑错误,使问题及早暴露,便于问题的定位解决,而…

排序算法之希尔排序

基本思想 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时&#x…

Rust——Macos安装使用

进入官网会自动检测当前是什么操作系统,我的是Mac,所以使用官网给的命令安装就可以了 终端输入: curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh # 安装过程中,最后一步需要输入选择,输入1是继续安装…

android踩坑日记1

Android四大组件-活动、服务、广播、碎片情况一应用场景:定时从服务器获取数据,然后活动或者碎片中根据最新获得的数据,更新UI。思考: 首先定时,想到定时器,推荐使用系统自带的AlertManager,而它…

Go_常量、iota(枚举)的使用

常量 常量是在程序运行过程中,其值不可以发生改变的数据,常量无法被获取地址 常量中的数据类型能是布尔型、数字型(整型、浮点型和复数型)、字符串 常量的定义是通过const关键字完成的,并且常量名称大写为公开&#…

pthon_函数式编程与面向对象编程的比较

函数式编程作为结构化编程的一种,正在受到越来越多的重视。工程中不在只是面向对象编程,更多的人尝试着开始使用函数式编程来解决软件工程中遇到的问题。 什么是函数式编程?在维基百科中给出了详细的定义,函数式编程(英…

Go_方法、方法重载

方法: 方法是绑定在自定义类型上的,常用在结构体上 方法只能通过绑定的自定义类型的变量来调用,方法不能直接调用,因为方法是和类型作关联的 方法是值拷贝的传递方式,如果希望改变结构体变量的值,需要通过…

go_命令行参数Args、flag

Args: os.Args是一个string的切片,可以存储所有的命令行参数(在终端运行才行), func main() {args : os.Argsfor i, v : range args {fmt.Println("索引:", i, "\t数据:"…

防止sql注入的方法

防止sql注入从前端的页面到后台可以分为以下几个办法: 1.在前端页面就可以用js过滤数据 要引入的包: import Java.util.regex.*; 正则表达式: private String CHECKSQL “^(.)\\sand\\s(.)|(.)\\sor(.)\\s$”; 判断是否匹配: Pat…

使用haystack实现django全文检索搜索引擎功能

前言 django是python语言的一个web框架,功能强大。配合一些插件可为web网站很方便地添加搜索功能。 搜索引擎使用whoosh,是一个纯python实现的全文搜索引擎,小巧简单。 中文搜索需要进行中文分词,使用jieba。 直接在django项目中使…

Go_输入与输出

输出的几种方式: fmt.Print:属于标准输出流,一般使用它来进行屏幕输出,但它不能换行fmt.Printf:可以格式化输出,输出不换行fmt.Println:输出后换行fmt.Sprint:返回一个格式化的字符…

3、事件响应函数(一)

一、激活销毁 void OnEnable()//每次激活脚本时调用{print("OnEnable");}void OnDisable()//脚本取消激活状态调用{print("OnDisable");}void OnDestroy()//被销毁时调用{print("OnDestroy");} 二、鼠标事件 /// <summary>/// 代码添加到需…

人人都是产品经理?

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

搭建一个简单的FTP服务器

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

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

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

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

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

Oracle中start with...connect by子句的用法

connect by 是结构化查询中用到的&#xff0c;其基本语法是&#xff1a;select … from tablenamestart with 条件1connect by 条件2where 条件3;例&#xff1a;select * from tablestart with org_id ‘HBHqfWGWPy’connect by prior org_id parent_id;简单说来是将一个树状…

用户访谈与问卷调查怎么做

用户访谈&#xff1a; 用提问交流的方式&#xff0c;了解用户体验的过程&#xff0c;访谈内容需要根据访谈目的来确定&#xff0c;通常包括产品的使用过程、使用感受、品牌印象等&#xff0c;属于定性研究。 访谈场景&#xff1a; 接听客服电话&#xff08;轮岗&#xff0c;客服…

【hdu2825】ac自动机 + 状压dp

传送门 题目大意&#xff1a; 给你一些密码片段字符串&#xff0c;让你求长度为n&#xff0c;且至少包含k个不同密码片段串的字符串的数量。 题解&#xff1a; 因为密码串不多&#xff0c;可以考虑状态压缩 设dp[i][j][sta]表示长为i的字符串匹配到j节点且状态为sta的数量。 其…