Go Json 序列化
Json 序列化是指把一个对象转换为二进制流,在 Go 语言中为 byte 切片
因为只有转成二进制流之后 , 才可以进行 IO 存储和网络传输
1. Go 标准库序列化
type Class struct {
Id int
Student []Student
}
type Student struct {
Name string
Age int
}
func JSONMarshal() {
s1 := Student{
Name: "Sakura",
Age: 21,
}
s2 := Student{
Name: "9S",
Age: 22,
}
c1 := Class{
Id: 1,
Student: []Student{s1, s2},
}
// JSON 序列化
bytes, err := json.Marshal(c1)
if err != nil {
log.Fatal("Json序列化失败:",err)
}
fmt.Println(string(bytes))
// 反序列化 JSON
var c2 Class
if err := json.Unmarshal(bytes, &c2); err != nil { //这里传地址是因为要给C2赋值
log.Fatal("Json反序列化失败:",err)
}
fmt.Printf("%v", c2) //如果想要看到字段 %+v
}
Json 序列化之后格式化显示
2. Go Sonic 包序列化
bytedance/sonic: A blazingly fast JSON serializing & deserializing library (github.com)
go get github.com/bytedance/sonic
将代码中的 JSON 替换成 sonic 就可以了
func SonicJsonMarshal() {
s1 := Student{
Name: "Sakura",
Age: 21,
}
s2 := Student{
Name: "9S",
Age: 22,
}
c1 := Class{
Id: 1,
Student: []Student{s1, s2},
}
// JSON 序列化
bytes, err := sonic.Marshal(c1)
if err != nil {
log.Fatal("Json序列化失败:", err)
}
fmt.Println(string(bytes))
// 反序列化 JSON
var c2 Class
if err := sonic.Unmarshal(bytes, &c2); err != nil { //这里传地址是因为要给C2赋值
log.Fatal("Json反序列化失败:",err)
}
fmt.Printf("%v", c2) //如果想要看到字段 %+v
}
评论区