目 录CONTENT

文章目录

Go Json 序列化

Sakura
2023-09-01 / 0 评论 / 0 点赞 / 4 阅读 / 2433 字 / 正在检测是否收录...

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
}

0

评论区