Golang---序列化和反序列化
Posted zpcoding
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang---序列化和反序列化相关的知识,希望对你有一定的参考价值。
为什么要序列化和反序列化
我们的数据对象要在网络中传输或保存到文件,就需要对其编码和解码动作,目前存在很多编码格式:json, XML, Gob, Google Protocol Buffer 等, Go 语言当然也支持所有这些编码格式。
序列化与反序列化
序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。通过从存储区中读取对象的状态,重新创建该对象,则为反序列化
序列化和反序列化规则
Go类型 json 类型
bool booleans
float64 numbers
string strings
nil null
在解析 json 格式数据时,若以 interface{} 接收数据,需要按照以上规则进行解析。
代码演示
package main
import (
"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]
以上是关于Golang---序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章