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:韩信]]
}
Golang——Json的序列化和反序列化相关推荐
- Json的序列化和反序列化
1.引用命名空间: using System.Runtime.Serialization; 2.json的序列化和反序列化的方法: publicclass JsonHelper { ///<su ...
- 在C#中,Json的序列化和反序列化的几种方式总结
在C#中,Json的序列化和反序列化的几种方式总结 在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象. 什么是JSON? JSON (Ja ...
- ASP.NET中JSON的序列化和反序列化
JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍 ...
- Newtonsoft.Json 的序列化与反序列化
首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.我举例说明DataTable的序列化和反序列化. 创建 ...
- Json.Net系列教程 3.Json.Net序列化和反序列化设置
上节补充 首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.我举例说明DataTable的序列化和反序列 ...
- java newtonsoft.json_Newtonsoft.Json 的序列化与反序列化
首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.我举例说明DataTable的序列化和反序列化. 创建 ...
- 一起谈.NET技术,ASP.NET 中JSON 的序列化和反序列化
JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍 ...
- C#中的Json的序列化和反序列化
Json是一种通用的数据格式,我们在数据交换的时候,经常会用到,下面介绍c#中的json序列化和反序列化,当然也可用在asp.net,silverlight,wpf中.我们在下面实例讲解如何进行Jso ...
- C# JSON字符串序列化与反序列化(转)
C# JSON字符串序列化与反序列化 C#将对象序列化成JSON字符串 public string GetJsonString() { List<Product> products = n ...
最新文章
- 2022秋招大战:算法岗挤破头,JAVA开发也被迫内卷
- 关于MySQL的SLEEP(N)函数
- php判断完整数,PHP的几个常用数字判断函数代码
- Android 开发中常用小技巧
- python的认识_认识Python和基础知识
- 不会诈骗的公司 都倒闭了
- phpcms模型缓存更新原理分析(转)
- memsql 多节点部署
- Prefuse 4未完
- TQ2440实现触摸屏和qt图形 解决segmentation fault
- 逻辑函数的两种标准形式
- 室性心律失常影响因素分析
- 银保监会回应中国金融机构数据被公开售卖:绝大部分系黑客伪造拼凑
- 我认为还是得学会自己焊接贴片元件,有专门的贴片元件焊接练习板,虽然有SMT,就像无人机要练习飞自稳一样。我们不能什么都靠SMT
- STM32F105RBT6 uart调试
- 使用GTK+获取屏幕分辨率并设置满屏显示效果
- 第一周 周报
- 【Python9】字典与集合
- php程序开发编辑器有哪些,常用的PHP编辑器有哪些?
- MySQL 获取当前时间的秒级、毫秒级时间戳
热门文章
- html输入密码跳转页面_【小乔锦囊】角色/仓库密码无法清除,怎么办?
- mysql手动启动1067错误_解决MySQL启动时万恶的1067错误(转)
- Node.js Event loop 图解
- 关于 create-react-app 自定义 eslint文件配置解决方案
- Java 多个异常处理
- Jsoup解析body片段
- python 生成图片_python生成带有表格的图片
- 面向对象方法的优势简化软件开发的过程_软件开发技巧的途径
- 微信公众号中选择时间css,微信公众号到底应该几点推文?
- pcl里面的点特征直方图(PFH)