Golang的序列化-JSON篇

                               作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

一.序列化概述

1>.什么是序列化

  数据在网络传输前后要进行序列化和反序列化。目的是将复杂的数据类型按照统一、简单且高效的形式转储,以达到网络传输的目的。

  除了在网络传输,有的数据存储到本地也是为了其它语言使用方便,通常也会使用相对来说较为通用的数据格式来存储,这就是我们常说的序列化,反序列化就是将数据按照规定的语法格式进行解析的过程。

2>.什么是JSON

  JSON采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括 C、C++、C#、Java、JavaScript、Perl、Python、go等)。这些特性使JSON成为理想的数据交换语言。 

  易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。目前,json已经成为主流的数据格式。
  JSON的特性:
    a).JSON解析器和JSON库支持许多不同的编程语言。
    b).JSON文本格式在语法上与创建JavaScript对象的代码相同。由于这种相似性,无需解析器,JavaScript程序能够使用内建的eval()函数,用JSON数据来生成原生的JavaScript对象。
    c).JSON 是存储和交换文本信息的语法。比 XML 更小、更快,更易解析。
    d).JSON 具有自我描述性,语法简洁,易于理解。
    e).JSON数据主要有两种数据结构,一种是键
/值,另一种是数组的形式来表示。

  博主推荐阅读:
    http:
//www.json.org.cn/

 

二.JSON序列化案例

1>.结构体序列化

package main

import (
    "encoding/json"
    "fmt"
)

/**
定义需要结构体
*/
type Teacher struct {
    Name    string
    ID      int
    Age     int
    Address string
}

func main() {
    s1 := Teacher{
        Name:    "Jason Yin",
        ID:      001,
        Age:     18,
        Address: "北京",
    }

    /**
    使用“encoding/json”包的Marshal函数进行序列化操作,其函数签名如下所示:
        func Marshal(v interface{}) ([]byte, error)
    以下是对Marshal函数参数相关说明:
        v:
            该参数是空接口类型。意味着任何数据类型(int、float、map,结构体等)都可以使用该函数进行序列化。
        返回值:
            很明显返回值是字节切片和错误信息
    */
    //data, err := json.Marshal(&s1)

    /**
    Go语言标准库的"encoding/json"包还提供了另外一个方法:MarshalIndent。
    该方法的作用与Marshall作用相同,只是可以通过方法参数,设置前缀、缩进等,对Json多了一些格式处理,打印出来比较好看。
    */
    data, err := json.MarshalIndent(s1, "\t", "")
    if err != nil {
        fmt.Println("序列化出错,错误原因: ", err)
        return
    }

    /**
    查看序列化后的json字符串
    */
    fmt.Println("序列化之后的数据为: ", string(data))
}
MarshalIndent函数案例(了解即可)

相关文章:

  • 2021-05-27
  • 2021-10-25
  • 2021-07-08
  • 2021-12-31
  • 2022-01-08
  • 2021-08-28
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案