概述
JSON:
- JSON(JavaScript Object Notation):是一种轻量级的数据交换格式。 它是基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
- 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于计算机解析和生成,并有效的提升网络传输效率。
- Json易于机器解析和生成,并有效的提升网络传输效率,通常程序传输时会先将数据序列化成json字符串,接收方再反序列化成原数据类型
- 所有的数据类型都可以通过Json表示
- Json.cn这个网站可以验证Json格式
- 序列化用
json.Marshal()
- 反序列化用
json.Unmarshal()
,反序列化时要和序列化前的数据类型保持一致
Json格式:
基本数据类型转Json:
func testBasic() {
num := 1.111
marshal, err := json.Marshal(num)
if err != nil {
fmt.Println("json.Marshal err:", err)
}
fmt.Println("序列化后:", string(marshal)) // 序列化后: 1.111
}
结构体与Json:
json.Marshal
:将Go语言中的数据结构转换为JSON格式的字节数组
type Student struct {
// 变量首字母大写才能被解析
Name string `json:"name"` // name表示在json中Name的字段名
Age int `json:"age"`
}
func main() {
student := Student{
Name: "韩信",
Age: 24,
}
marshal, _ := json.Marshal(&student)
s := string(marshal)
fmt.Println("序列化后:", s) // 序列化后: {"name":"韩信","age":24}
// 使用Unmarshal反序列化
json.Unmarshal([]byte(s), &student)
fmt.Println("反序列化后:", student) // 反序列化后: {韩信 24}
}
map与json:
func main() {
var m map[string]interface{}
m = make(map[string]interface{})
m["name"] = "韩信"
m["age"] = 23
m["address"] = "野区"
marshal, _ := json.Marshal(m)
str := string(marshal)
fmt.Println("序列化后:", str) // 序列化后: {"address":"野区","age":23,"name":"韩信"}
// 单独使用的时候,反序列化不需要make,被封装到Unmarshal中了
json.Unmarshal([]byte(str), &m)
fmt.Println("反序列化后:", m) // 反序列化后: map[address:野区 age:23 name:韩信]
}
切片与Json:
func main() {
var slice []map[string]interface{}
var m map[string]interface{}
m = make(map[string]interface{})
m["name"] = "韩信"
m["age"] = 23
m["address"] = "野区"
slice = append(slice, m)
marshal, _ := json.Marshal(m)
str := string(marshal)
fmt.Println("序列化后:", str) // 序列化后: {"address":"野区","age":23,"name":"韩信"}
json.Unmarshal([]byte(str), &slice)
fmt.Println("反序列化后:", slice) // 反序列化后: [map[address:野区 age:23 name:韩信]]
}
最后
以上就是精明镜子为你收集整理的Golang——Json的序列化和反序列化的全部内容,希望文章能够帮你解决Golang——Json的序列化和反序列化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复