Golang---序列化和反序列化

你说的曾经没有我的故事 提交于 2019-12-10 22:09:13

为什么要序列化和反序列化

  我们的数据对象要在网络中传输或保存到文件,就需要对其编码和解码动作,目前存在很多编码格式:json, XML, Gob, Google Protocol Buffer 等, Go 语言当然也支持所有这些编码格式。

序列化与反序列化

  序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。通过从存储区中读取对象的状态,重新创建该对象,则为反序列化

 

序列化和反序列化规则

Go类型              json 类型

bool                   booleans

float64               numbers

string                 strings

nil                      null

在解析 json 格式数据时,若以 interface{} 接收数据,需要按照以上规则进行解析。

 

代码演示

package mainimport (   "encoding/json"   "fmt")type People struct {   name   string  `json:"name"` // name,小写不导出   Age    int     `json:"age"`  // age   Gender string `json:"gender"`  // gender   Lesson}type Lesson struct {   Lessons []string `json:"lessons"`}func main() {   jsonstr := `{"Age": 18,"name": "Jim" ,"gender": "男","lessons":["English","History"],"Room":201,"n":null,"b":false}`   // 反序列化   var people People   if err := json.Unmarshal([]byte(jsonstr),&people); err == nil {      fmt.Println("struct people:")      fmt.Println(people)   }   // 反序列化 json 字符串中的一部分   var lessons Lesson   if err := json.Unmarshal([]byte(jsonstr),&lessons); err == nil {      fmt.Println("struct lesson:")      fmt.Println(lessons)   }   // 反序列化 json 字符串数组   jsonstr = `["English","History"]`   var str []string   if err := json.Unmarshal([]byte(jsonstr), &str); err == nil {      fmt.Println("struct str:")      fmt.Println(str)   }}// 打印结果

  struct people:
  { 18 男 {[English History]}}
  struct lesson:
  {[English History]}
  struct str:
  [English History]

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!