反序列化-结构体反序列化
反序列化
既然序列化是将go语言的某种类型的数据转换为josn字符串,那么 “反序列化”(Deserialize),就是将josn字符串转换回序列化之前数据的过程。简单理解就是序列化的逆操作。
这里按我们前面章节序列化后得到的json串依次进行反序列化。
结构体反序列化
首先,依然需要创建结构体类型。要求该类型必须与之前序列化时指定的结构体类型完全一致(个数、类型、顺序)。
type Teacher struct {
Name string
Id int
Age int
Addr string
}
定义结构体变量
var tea Teacher
准备待反序列化的json字符串,由于字串中包含 " ",使用反引号包裹该字串。当然,实际开发过程中,这个数据大多情况下是借助网络传输获取的。
str := `{"Name":"瞎么海","Id":110,"Age":33,"Addr":"天津市海河"}`
序列化函数:
import "encoding/json"
func Unmarshal(data []byte, v interface{}) error
参数1:待解析的 json编码字符串
参数2:解析后传出的结果
返回值:err
示例代码:
import (
"encoding/json"
"fmt"
)
// 定义结构体
type Teacher struct {
Name string
Id int
Age int
Addr string
}
// 封装函数测试结构体反序列化
func structDeserial() {
// 准备待反序列化的json字符串
str := `{"Name":"瞎么海","Id":110,"Age":33,"Addr":"天津市海河"}`
// 定义Teacher类型变量
var tea Teacher
// 使用 encoding/json 包中的 Unmarshal() 函数,反序列化
err := json.Unmarshal([]byte(str), &tea)
if err != nil {
fmt.Println("Unmarshal err:", err)
return
}
// 查看反序列化结果
fmt.Println("反序列化后:tea=", tea, "tea.Name=", tea.Name)
}
func main() {
// 测试结构体反序列化
structDeserial()
}
输入结果为:
反序列化后:tea= {瞎么海 110 33 天津市海河} tea.Name= 瞎么海