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---序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章

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

Grpc 在golang中的使用

Golang区块链开发003区块序列化存储

RestFramework

序列化和反序列化代码

golang的xorm如何将[]map[string][]byte 格式的数据序列化成json输出