码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-12-10 22:30:16      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:name   格式   oat   port   XML   ber   people   反序   字符串数组   

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

  我们的数据对象要在网络中传输或保存到文件,就需要对其编码和解码动作,目前存在很多编码格式: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---序列化和反序列化

标签:name   格式   oat   port   XML   ber   people   反序   字符串数组   

原文地址:https://www.cnblogs.com/zpcoding/p/12019472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!