go学习笔记
基础
go 定义变量的几种方式
常量的声明
go基本数据类型
go语言中的流程控制
golang中的数组
切片
golang中的map 详解
golang 函数详解
内置函数 panic/recover
golang time包 以及日志函数
golang中的指针
golang 中的结构体
Golang 结构体 和 json互相转换 序列化 反序列化
Golang 中的 go mod 以及 Golang包 详解
golang 中的接口
golang goroutine channel 实现并发 和 并行
channel
goroutine 互斥锁 读写互斥锁
golang 反射
golang 标准库
io
strconv
工具 + blog
进程 线程 协程
空接口 类型断言
为Go项目编写Makefile
减小 Go 代码编译后的二进制体积
go windows下编译linux可执行文件
本文档使用 MrDoc 发布
-
+
首页
Golang 结构体 和 json互相转换 序列化 反序列化
json 是一种轻量级的数据交换格式。易于人阅读 和 编写。同时也易于机器解析和生成。RESTfull Api 接口中返回的数据都是json数据。 ## 结构体与json 序列化 **golang json 序列化** 是指把结构体数据转化成json格式的字符串,**golang json 的反序列化** 是指把 json 数据 转化成 golang中的结构体对象 Golang 中的序列化 和 反序列化主要是通过 "encoding/json" 包中的 json.Marshal() 和 ### json.Marshal ``` type student struct { Id int //变量定义 必须首字母大写 否则无法转换成 json Name string Sex string } func main() { var s = student{ Id: 200333, Name: "haha", Sex: "man", } jsonByte, err := json.Marshal(s) //返回 byte 数组 jsonStr := string(jsonByte) // 将byte 数组 强转成 string 类型 fmt.Printf("jsonStr: %v\n", jsonStr) fmt.Printf("err: %v\n", err) /* jsonStr: {"Id":200333,"Name":"haha","Sex":"man"} err: <nil> */ } ``` ### json.Unmarshal ``` type student struct { Id int //变量定义 必须首字母大写 否则无法转换成 json Name string Sex string } func main() { var jsonStr = `{"Id":200333,"Name":"haha","Sex":"man"}` var student1 student err := json.Unmarshal([]byte(jsonStr), &student1) fmt.Printf("err: %v\n", err) fmt.Printf("student1: %v\n", student1) /* err: <nil> student1: {200333 haha man} */ } ``` ### 结构体标签 tag ``` type student struct { Id int `json:"id"` //通过 tag 实现自定义 json序列化的 key Name string `json:"name"` Sex string } func main() { var student1 = student{ Id: 2883, Name: "haha", Sex: "man", } studentByte, _ := json.Marshal(student1) s := string(studentByte) fmt.Printf("s: %v\n", s) //s: {"id":2883,"name":"haha","Sex":"man"} } ``` ### 嵌套结构体 json ``` type Student struct { Id int `json:"id"` //通过 tag 实现自定义 json序列化的 key Name string `json:"name"` Sex string } type Class struct { Title int Student []Student } func main() { myclass := Class{ Title: 1, Student: make([]Student, 0), } for i := 1; i <= 5; i++ { mystudent := Student{ Id: i, Name: fmt.Sprintf("str%d", i), Sex: "man", } myclass.Student = append(myclass.Student, mystudent) } myclassJson, _ := json.Marshal(myclass) s := string(myclassJson) fmt.Printf("s: %v\n", s) /* s: {"Title":1,"Student":[{"id":1,"name":"str1","Sex":"man"},{"id":2,"name":"str2","Sex":"man"},{"id":3,"name":"str3","Sex":"man"},{"id":4,"name":"str4","Sex":"man"},{"id":5,"name":"str5","Sex":"man"}]} */ } ```
admin
2022年8月6日 14:59
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码