9.3 Go json
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相关推荐
- 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)
目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...
- Go 知识点(04)— 结构体字段转 json格式 tag 标签的作用
我们知道在 Go 语言中无论是变量.常量还是函数,对于首字母大小写有不同的处理. 首字母大写,标志着该字段或者函数是能导出的,也就是可以被其它包所能访问的: 首字母小写,标志着该字段是私有的,只能在本 ...
- VS Code 配置调试参数、launch.json 配置文件属性、task.json 变量替换、自动保存并格式化、空格和制表符、函数调用关系、文件搜索和全局搜索、
1. 生成配置参数 对于大多数的调试都需要在当前项目目录下创建一个 lanch.json 文件,位置是在当前项目目录下生成一个 .vscode 的隐藏文件夹,在里面放置一些配置内容,比如:settin ...
- Python 标准库之 json
1. josn 定义 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含 ...
- python中如何对复杂的json数据快速查找key对应的value值(使用JsonSearch包)
前言 之前在实际的项目研发中,需要对一些复杂的json数据进行取值操作,由于json数据的层级很深,所以经常取值的代码会变成类似这样: value = data['store']['book'][0] ...
- 数据库里存json数据
需求: 查询上个月每个人各个插件的总加分汇总为一个json存储到一个字段里 查询上个月每个组织机构插件的各个插件的总加分汇总为一个json存储到一个字段里 流程: 查询后返回结果是一个List集合,每 ...
- http传输json文件_python
https://cloud.tencent.com/developer/article/1571365 http传输图片 https://www.cnblogs.com/jruing/p/122156 ...
- python:Json模块dumps、loads、dump、load介绍
20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...
- dataframe 转json
20210810 字符串转换为字典的时候,如果没有引号会报找不到 这个名称 字符串类型变字典 本身含有字典的括号 列表里面本身要是字典类型 才能通过此方法 把列表转换为dataframe # 格式检查 ...
- Json文件解析(下
Json文件解析(下) 代码地址:https://github.com/nlohmann/json 从STL容器转换 任何序列容器(std::array,std::vector,std::deque, ...
最新文章
- 30分钟搞定ES6常用基础知识
- 解决Spring boot中读取属性配置文件出现中文乱码的问题
- 人工智能应用上的九大障碍
- 证明是一个偶像,数学家在这个偶像前折磨自己!
- 判断系统大小端方法分析与总结
- tornado异步请求响应速度的实例测试
- C语言内联函数的作用
- 佳能G1810G2810G1800G2800G3800 废墨 手动清零方法
- 介绍两款实用软件:CCPROXY和SOCKSCAP
- html页面布局实例,div布局实例
- 小米笔记本PRO黑苹果使用第三方蓝牙设备
- Pycharm打开已有项目配置python环境
- 把握数字经济时代新机遇:银行业加快推进数字化转型
- 计算机深度睡眠状态啥意思,什么是计算机的“深度睡眠”模式?
- 低代码常见场景【上】|如何解决业务问题
- Microsoft 365独家安全解决方案
- 初学者好 |如何从头开始创建一个图像识别的AI应用[ctrl:c+v,你就完成了]
- 什么是汽车公告?汽车公告主机厂要做什么?
- STM32关于“NVIC_InitStructure.NVIC_IRQChannel = TIM1_IRQn; error:useof undeclared identifi ‘T1M1_IRQN‘
- 最全的Android源码目录结构详解