跳到主要内容

序列化

提示

序列化: 通过某种方式把数据结构或对象写入到磁盘文件中或通过网络传到其他节点的过程。

提示

反序列化:把磁盘中对象或者把网络节点中传输的数据恢复为python的数据对象的过程。

7.1、json初识

序列化最重要的就是json序列化。

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

| go语言数据类型 | json支持的类型 |

| --------------------------- | --------------------------- |

| 整型、浮点型 | 整型、浮点型 |

| 字符串(在双引号中) | 字符串(双引号) |

| 逻辑值(truefalse) | 逻辑值(truefalse) |

| 数组,切片 | 数组(在方括号中) |

| map | 对象(在花括号中) |

| nil | null |

7.2、结构体的json操作

package main

import (
"encoding/json"
"fmt"
)

type Addr struct {
Province string
City string
}

type Stu struct {
Name string `json:"name"` // 结构体的标签
Age int `json:"-"` // 表示不参与序列化
Addr Addr
}

func main() {
var stuMap = map[string]interface{}{"name": "yuan", "age": 32, "addr": "beijing"}
var stuStruct = Stu{Name: "yuan", Age: 18, Addr: Addr{Province: "Hebei", City: "langFang"}}

// 序列化
jsonStuMap, _ := json.Marshal(stuMap)
jsonStuStruct, _ := json.Marshal(stuStruct)

fmt.Println(string(jsonStuMap))
fmt.Println(string(jsonStuStruct))

// 反序列化
// var x = make(map[int]string)
var StuMap map[string]interface{}
err := json.Unmarshal(jsonStuMap, &StuMap)
if err != nil {
return
}
fmt.Println("StuMap", StuMap, StuMap["name"])

var StuStruct Stu
err := json.Unmarshal(jsonStuStruct, &StuStruct)
if err != nil {
return
}
fmt.Println(StuStruct)
fmt.Println(StuStruct.Name)
fmt.Println(StuStruct.Addr.City)
}