9.3 Go json

json是一种轻量级的数据交换格式,易于机器解析,是种key-value格式。

JavaScript Object Notation是中种主流的数据格式。

json常用于网络传输

先将程序数据(如map、struct等)序列化成json字符串
接收方得到json字符串时,进行反序列化成原有数据类型

JS语言中,任何数据类型都可以通过JSON表示,如字符串、数字、对象、数组、map、结构体等。
JSON用键值对保存数据

1.1. 在线解析json网址

https://www.json.cn/

1.2. json序列化

序列化是指将key-value结构的数据类型如struct、map、切片序列化成json字符串。

实例

package mainimport ("encoding/json""fmt"
)//自定制序列化后,json字符串的key名,可以用struct的tag标签
type Student struct {Name  string  `json:"姓名"`Age   int     `json:"年纪"`Score float64 `json:"成绩"`
}//序列化结构体
func testStruct() {stu := Student{"老王",19,99.9,}//序列化结构体data, err := json.Marshal(&stu)if err != nil {fmt.Printf("序列化出错,", err)}//data是数组切片,需要类型强转fmt.Printf("序列化结果:%v\n", string(data))
}//序列化map
func testMap() {mymap := make(map[string]string)mymap["名字"] = "银角大王"mymap["年纪"] = "三十六"mymap["住址"] = "沙河"//对map序列化data, err := json.Marshal(mymap)if err != nil {fmt.Printf("序列化出错:%v\n", err)}fmt.Println("序列化结果:", string(data))
}//序列化切片
func testSlice() {//定义切片var s1 []map[string]interface{}var m1 map[string]interface{}//对map初始化m1 = make(map[string]interface{})m1["名字"] = "牛魔狗"m1["年纪"] = 11m1["地址"] = "流沙河"//追加切片元素s1 = append(s1, m1)//对切片序列化data, err := json.Marshal(s1)if err != nil {fmt.Printf("序列化出错:%v\n", err)}fmt.Println("序列化结果:", string(data))}func testFloat64() {n1 := 123.22data, _ := json.Marshal(n1)fmt.Printf("%T %v\n", string(data), string(data))}
func main() {testStruct()testMap()testSlice()testFloat64()testFloat64() //对基本数据类型序列化场景较少
}

运行结果

序列化结果:{"姓名":"老王","年纪":19,"成绩":99.9}
序列化结果: {"住址":"沙河","名字":"银角大王","年纪":"三十六"}
序列化结果: [{"名字":"牛魔狗","地址":"流沙河","年纪":11}]
string 123.22
string 123.22

1.3. 反序列化

将json字符串反序列化成对应的数据类型(struct、map、slice)等。

package mainimport ("encoding/json""fmt"
)//自定制序列化后,json字符串的key名,可以用struct的tag标签
type Student struct {Name  string  `json:"姓名"`Age   int     `json:"年纪"`Score float64 `json:"成绩"`
}//反序列化结构体
func unmarshalStruct() {//模拟接收到的json数据,本地需要转义jsonStr := "{\"姓名\":\"老王\",\"年纪\":19,\"成绩\":99.9}"//定义Stu实例var stu Student//反序列化接收字节切片,以及空接口类型err := json.Unmarshal([]byte(jsonStr), &stu)if err != nil {fmt.Printf("反序列化出错:%v\n", err)}fmt.Printf("反序列化结果:stu=%v stu.Name=%v stu.Age=%v stu.Score=%v\n", stu, stu.Name, stu.Age, stu.Score)
}//反序列化map
func unmarshalMap() {mapStr := "{\"住址\":\"沙河\",\"名字\":\"银角大王\",\"年纪\":\"三十六\"}"//定义变量 接收反序列化数据var m1 map[string]interface{}//反序列化不需要对map进行make,unmarshal函数已经封装make初始化err := json.Unmarshal([]byte(mapStr), &m1)if err != nil {fmt.Printf("反序列化出错:%v\n", err)}fmt.Printf("反序列化结果:%v\n", m1)}//反序列化切片
func unmarishalSlice() {sliceStr := "[{\"名字\":\"牛魔狗\",\"地址\":\"流沙河\",\"年纪\":11}]"var slice []map[string]interface{}//切片也不需要在这里make,json.Unmarishal已经封装好makeerr := json.Unmarshal([]byte(sliceStr), &qslice)if err != nil {fmt.Println("反序列化出错了,", err)}fmt.Printf("反序列化结果是:%v\n", slice)
}func main() {unmarshalStruct()unmarshalMap()unmarishalSlice()
}

转载于:https://www.cnblogs.com/open-yang/p/11256925.html

9.3 Go json相关推荐

  1. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

    目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...

  2. Go 知识点(04)— 结构体字段转 json格式 tag 标签的作用

    我们知道在 Go 语言中无论是变量.常量还是函数,对于首字母大小写有不同的处理. 首字母大写,标志着该字段或者函数是能导出的,也就是可以被其它包所能访问的: 首字母小写,标志着该字段是私有的,只能在本 ...

  3. VS Code 配置调试参数、launch.json 配置文件属性、task.json 变量替换、自动保存并格式化、空格和制表符、函数调用关系、文件搜索和全局搜索、

    1. 生成配置参数 对于大多数的调试都需要在当前项目目录下创建一个 lanch.json 文件,位置是在当前项目目录下生成一个 .vscode 的隐藏文件夹,在里面放置一些配置内容,比如:settin ...

  4. Python 标准库之 json

    1. josn 定义 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含 ...

  5. python中如何对复杂的json数据快速查找key对应的value值(使用JsonSearch包)

    前言 之前在实际的项目研发中,需要对一些复杂的json数据进行取值操作,由于json数据的层级很深,所以经常取值的代码会变成类似这样: value = data['store']['book'][0] ...

  6. 数据库里存json数据

    需求: 查询上个月每个人各个插件的总加分汇总为一个json存储到一个字段里 查询上个月每个组织机构插件的各个插件的总加分汇总为一个json存储到一个字段里 流程: 查询后返回结果是一个List集合,每 ...

  7. http传输json文件_python

    https://cloud.tencent.com/developer/article/1571365 http传输图片 https://www.cnblogs.com/jruing/p/122156 ...

  8. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  9. dataframe 转json

    20210810 字符串转换为字典的时候,如果没有引号会报找不到 这个名称 字符串类型变字典 本身含有字典的括号 列表里面本身要是字典类型 才能通过此方法 把列表转换为dataframe # 格式检查 ...

  10. Json文件解析(下

    Json文件解析(下) 代码地址:https://github.com/nlohmann/json 从STL容器转换 任何序列容器(std::array,std::vector,std::deque, ...

最新文章

  1. 30分钟搞定ES6常用基础知识
  2. 解决Spring boot中读取属性配置文件出现中文乱码的问题
  3. 人工智能应用上的九大障碍
  4. 证明是一个偶像,数学家在这个偶像前折磨自己!
  5. 判断系统大小端方法分析与总结
  6. tornado异步请求响应速度的实例测试
  7. C语言内联函数的作用
  8. 佳能G1810G2810G1800G2800G3800 废墨 手动清零方法
  9. 介绍两款实用软件:CCPROXY和SOCKSCAP
  10. html页面布局实例,div布局实例
  11. 小米笔记本PRO黑苹果使用第三方蓝牙设备
  12. Pycharm打开已有项目配置python环境
  13. 把握数字经济时代新机遇:银行业加快推进数字化转型
  14. 计算机深度睡眠状态啥意思,什么是计算机的“深度睡眠”模式?
  15. 低代码常见场景【上】|如何解决业务问题
  16. Microsoft 365独家安全解决方案
  17. 初学者好 |如何从头开始创建一个图像识别的AI应用[ctrl:c+v,你就完成了]
  18. 什么是汽车公告?汽车公告主机厂要做什么?
  19. STM32关于“NVIC_InitStructure.NVIC_IRQChannel = TIM1_IRQn; error:useof undeclared identifi ‘T1M1_IRQN‘
  20. 最全的Android源码目录结构详解

热门文章

  1. js正则获取顶级域名
  2. 残差连接 (及 梯度消失 网络退化)详解
  3. ubuntu 12.04 提高更新网速的方法
  4. matlab的linprog函数
  5. 设置项目的favicon图标
  6. 我用python玩炉石传说(2)-----炉石卡牌套牌爬取器及自动分析卡牌相关度
  7. input输入框赋值、取值
  8. 电子文件全程管理与信息安全保障的并行之路
  9. 解决Mac下使用emmyLua调试遇到“dynamic libraries not enabled; check your Lua installation”
  10. 【前端学习】iconfont阿里字体使用