1、json的序列化

介绍.
  json序列化是指,将有key-value结构的数据类型(比如结构体、map、 切片)序列化成json字符串的操作。
应用案例
  这里我们介绍一下结构体、map和切片的序列化,其它数据类型的序列化类似。

package mainimport ("encoding/json""fmt"
)//定义一个结构体
type Monster struct {Name  stringAge   intSal   float64Skill string
}func testStruct() {monster := Monster{Name:  "牛魔王",Age:   100,Sal:   3000.0,Skill: "牛魔拳",}//将monster系列化data, err := json.Marshal(&monster)if err != nil {fmt.Printf("序列化错误 err=%v\n", err)}//输出序列化结果fmt.Printf("monster序列化后=%v\n", string(data))
}//将map进行序列化
func testMap() {//定义一个mapvar a map[string]interface{}a = make(map[string]interface{})a["name"] = "tom"a["age"] = 29a["address"] = "美国"//将map序列化data, err := json.Marshal(a)if err != nil {fmt.Printf("序列化错误err=%v\n", err)}//输出序列化结果fmt.Printf("map序列化后=%v\n", string(data))
}//对切片进行序列化
func testSlice() {var slice []map[string]interface{}var m1 map[string]interface{}m1 = make(map[string]interface{})m1["name"] = "Jack"m1["age"] = 3m1["address"] = "北京"slice = append(slice, m1)var m2 map[string]interface{}m2 = make(map[string]interface{})m2["name"] = "tom"m2["age"] = 10m2["address"] = [2]string{"墨西哥", "夏威夷"}slice = append(slice, m2)//对切片进行序列化data, err := json.Marshal(slice)if err != nil {fmt.Printf("序列化错误err=%v\n", err)}//输出序列化结果fmt.Printf("slice序列化后=%v\n", string(data))
}
//对基本数据类型进行序列化
func testFloat64()  {var num1 float64=123.2//对切片进行序列化data, err := json.Marshal(num1)if err != nil {fmt.Printf("序列化错误err=%v\n", err)}//输出序列化结果fmt.Printf("num1 序列化后=%v\n", string(data))
}
func main() {testStruct()testMap()testSlice()testFloat64()
}

➢注意事项
  对于结构体的序列化,如果我们希望序列化后的key的名字,又我们自己重新制定,那么可以给struct指定一个tag标签。

//定义一个结构体
type Monster struct {Name  string `json:"monster_name"` //反射机制Age   int `json:"monster_age"`Sal   float64Skill string
}

加上tag后

2、json反序列化

介绍.
  json反序列化是指,将json字符串反序列化成对应的数据类型(比如结构体、map、切片)的操作
➢应用案例
  这里我们介绍一下将json字符串反序列化成结构体、map和切片

package mainimport ("encoding/json""fmt"
)//定义一个结构体
type Monster struct {Name  stringAge   intSal   float64Skill string
}//将json字符串反序列化成struct
func unmarshalStruct() {//说明:str在项目开发中,是通过网络传输获取到..或者是读取文件获取到str := " {\"Name\":\"牛魔王\",\"Agel\":500,\"Sal\":10.2,\"Skill\":\"牛魔拳\"}"//定义一个Monster实例var monster Monstererr := json.Unmarshal([]byte(str), &monster)if err != nil {fmt.Printf("unmarshal err=%v\n", err)}fmt.Printf("反序列化后 monster=%v monster.Name=%v\n", monster, monster.Name)}//将json字符串反序列化成map
func unmarshalMap() {str := " {\"Name\":\"牛魔王\",\"Agel\":500,\"Sal\":10.2}"var a map[string]interface{}//反序列化//注意:反序列化map,不需要make,因为make操作被封装到Unmarshal函数err := json.Unmarshal([]byte(str), &a)if err != nil {fmt.Printf("unmarshal err=%v\n", err)}fmt.Printf("反序列化后 a=%v\n", a)
}//将json反序列化为切片
func unmarshalSlice() {str := "[ {\"address\":\"北京\",\"age\":\"7\",\"name\":\"jack\"}," +" {\"address\":[\"墨西哥\",\"夏威夷\"],\"age\":\"20\",\"name\":\"tom\"}]"//定义一个slicevar slice []map[string]interface{}//反序列化,不需要make,因为make操作被封装到Unmarshal函数err := json.Unmarshal([]byte(str), &slice)if err != nil {fmt.Printf("unmarshal err=%v\n", err)}fmt.Printf("反序列化后 slice=%v\n", slice)}func main() {unmarshalStruct()unmarshalMap()unmarshalSlice()
}

➢对上面代码的小结说明
(1)在反序列化一个json字符串时,要确保反序列化后的数据类型和原来序列化前的数据类型一致。
(2)如果json字符串是通过程序获取到的,则不需要再对“转义处理。

golang json序列化与反序列化相关推荐

  1. DotNet的JSON序列化与反序列化

    JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...

  2. JSON序列化和反序列化还有这种玩法

    Mixin对于前端开发者可不陌生,Vue.React等知名前端框架都使用了Mixin.而对于后端开发,尤其是Java后端开发来说Mixin却是一个很陌生的概念.今天来我们通过Jackson让后端开发者 ...

  3. C#中JSON序列化和反序列化

    有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境-- 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...

  4. json 反序列化 父子类型_Jaskson精讲第7篇-类继承关系下的JSON序列化与反序列化JsonTypeInfo...

    Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的, ...

  5. Go进阶(7): JSON 序列化和反序列化

    1. json序列化和反序列化基础 json数据的序列化和反序列化是一种非常常见的方式,尤其是在http/rcp的微服务调试中. 基础语法 在 Go 中我们主要使用官方的 encoding/json  ...

  6. 序列化对象C++对象的JSON序列化与反序列化探索

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 一:背景 作为一名C++开发人员,我始终很期待能够像C#与JAVA那样,可以省力的进行对象的序列化与反序列化,但到现在为止,还没有找 ...

  7. php和js序列化,PHP中serialize和json序列化与反序列化的区别

    在PHP中,serialize和json两种方式对一个对象或数组进行序列化或反序列化有什么区别呢? 假设一个对象和一个数组: PHP 1 2 3 4$web=newstdClass; $web-> ...

  8. python3 中的Json序列化、反序列化 和 字符编码的问题解决

    python3 中的Json序列化.反序列化 和 字符编码的问题解决 参考文章: (1)python3 中的Json序列化.反序列化 和 字符编码的问题解决 (2)https://www.cnblog ...

  9. C#之json序列化与反序列化

    http://106.86.154.29:5191/jsdecoder.wasm http://106.86.154.29:5191/webgl.js http://106.86.154.29:519 ...

最新文章

  1. ccflow如何实现自由流程的?
  2. 我的世界java版gamemode指令_我的世界切换生存和创造模式的命令是什么?
  3. 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)
  4. 模拟四:STEMA 考试选择题模拟练习试卷(中级组)及答案 + 自我解题笔记
  5. SpringMVC 全局异常处理,返回json
  6. python学习点滴记录-Day09
  7. 电子计算机职业40201,天津滨海中等专业学校
  8. 增加或修改的存储过程
  9. Nagios Plugin for Cacti (npc插件) Download 下载
  10. 3.7 测试时的 Batch Norm
  11. mysql主库从库在同一台服务器_MySQL_MySQL 数据库两台主机同步实战(linux),当一个从服务器连接到主服务 - phpStudy...
  12. ContentObserver
  13. PowerMockito问题解决一则
  14. HTTP2还没用上,HTTP3就出来了
  15. 分布式数据同步工具之DataX Web的基本使用
  16. 微信自定义菜单java_java微信开发API第四步 微信自定义个性化菜单实现
  17. SAS(五)建立SAS数据集的方法及导出数据
  18. 在python中、int表示的是数据类型是_Python3基本数据类型之intstr
  19. Threejs围墙动画
  20. 说说我在机场碰上的那些大家喜闻乐见的事

热门文章

  1. java 实战_Java项目实战之天天酷跑
  2. 使用canvas实现雪花效果
  3. 如何卸载微信小程序?微信常识分享
  4. JPA入门、JPQL
  5. JPQL和SQL的比较
  6. 【论文阅读】【3d目标检测】FAST pointrcnn
  7. 程序员参加大型同性线下交友会是什么体验?
  8. WLAN控制器 - CAPWAP协议简介
  9. 记dwz(JUI)前端框架使用(一)
  10. 功能测试_大屏常见测试点