json包可以实现json的编码和解码,就是将json字符串转换为struct,或者将struct转换为json。
一 核心函数
1.1 Marshal
func Marshal(v interface{
}) ([]byte, error)
将struct编码成json,可以接收任意类型
- 布尔型转换为 JSON 后仍是布尔型,如true -> true
- 浮点型和整数型转换后为JSON里面的常规数字,如 1.23 -> 1.23
- 字符串将以UTF-8编码转化输出为Unicode字符集的字符串,特殊字符比如<将会被转义为\u003c
- 数组和切片被转换为JSON 里面的数组,[]byte类会被转换为base64编码后的字符串,slice的零值被转换为null
- 结构体会转化为JSON对象,并且只有结构体里边以大写字母开头的可被导出的字段才会被转化输出,而这些可导出的字段会作为JSON对象的字符串索引
- 转化一个map 类型的数据结构时,该数据的类型必须是
map[string]T
(T 可以是encoding/json 包支持的任意数据类型)
实例演示:
① 结构体转换为json
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Age int
Email string
}
func main() {
p := Person{
Name: "Psych",
Age: 20,
Email: "[email protected]",
}
b, _ := json.Marshal(p)
fmt.Printf("b: %v\n", string(b))
}
运行结果:
[Running] go run "c:\Users\Mechrevo\Desktop\go_pro\test.go"
b: {
"Name":"Psych","Age":20,"Email":"[email protected]"}
[Done] exited with code=0 in 0.965 seconds
② 解析嵌套类型
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Age int
Email string
Parent