反序列化-结构体反序列化

未匹配的标注

反序列化

既然序列化是将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= 瞎么海

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~