全栈编程

Balance $ 2,317
Item Sold 1230
文章作者: 全栈编程@luboke.com
版权声明: 本文章为全栈编程go语言体系课视频教程配套电子书,版权归 全栈编程@luboke.com所有,欢迎免费学习,转载必须注明出处!但禁止任何商业用途,否则将受到法律制裁!

数据如果需要在网络中传输或者存储于硬盘中,那必须按照特定的数据格式,涉及到数据格式就必须对它进行编码与解码;

较常使用的数据编码格式:JSON,XML,gob,等等。Go 语言内置了对这些编码格式的支持;

数据的存储结构可能包含二进制数据,如果通过文本编辑器打开,可读性差。

同时针对结构体当中存在匿名字段的,也无法确定该字段的含义。

因此把数据转换成纯文本,使用命名的字段来标注,让其具有可读性。这样的数据格式可以通过网络传输,而且是与平台无关的,任何类型的应用都能够读取和输出,不与操作系统和编程语言的类型相关。

下面是一些术语说明:

  • 数据结构 --> 指定格式 = 序列化 或 编码(传输之前)
  • 指定格式 --> 数据格式 = 反序列化 或 解码(传输之后)

序列化是在内存中把数据转换成指定格式(data -> string),反之亦然(string -> data structure)

编码也是一样的,只是输出一个数据流(实现了 io.Writer 接口);解码是从一个数据流(实现了 io.Reader)输出到一个数据结构。

JSON(JavaScript Object Notation,参阅 http://json.org)往往被作为数据传输或存储的首选编码格式,特别是在当今app盛行的时代,app所使用的接口基本都是以json的形式来传递的,主要还是因为json的数据格式简单,易读。

尽管 XML 被广泛的应用,但是 JSON 更加简洁、轻量(占用更少的内存、磁盘及网络带宽)和更好的可读性,这也使它越来越受欢迎。

Go 语言的 json 包可以让你在程序中方便的读取和写入 JSON 数据。

JSON编码格式组成

  • json文件由对象(集合)、数组、key/value元素组成,可以相互嵌套。
  • 使用大括号包围的是对象,使用中括号包围的是数组,冒号分隔的是元素。
  • 元素的key只能是字符串。
  • 元素的value数据类型可以是如下类型:
            number:整数和浮点数都属于number类型,可以是正负数
            string:字符串
            bool:true/false
            array:使用中括号包围的部分是array
            object:使用大括号包围的是对象
            null:空。一般是这个值本来应该是某个object的,但是object不存在,于是为Null
  • 对象、数组容器中每个元素之间使用逗号隔开,容器的最后一个元素不加逗号
  • 顶级对象都是匿名的,也就是没有key
  • 注释只能使用”#“

一段json,摘自微商城小程序接口

{
    "data":[
        {
            "id":1970,#json注释只能使用
            "intro":"无线蓝牙耳机双耳5.0运动跑步隐形单耳入耳挂耳式iphone11安卓通用适用苹果X华为小米女生款7可爱8超长待机xr",
            "cid":13,
            "name":"无线蓝牙耳机双耳5.0运动跑步隐形单耳入耳挂耳式iphone11安卓通用适用苹果X华为小米女生款7可爱8超长待机xr",
            "photo_little":"http://www.onajax.com/static/2/13/4/1.JPG",
            "photo_lists":"http://www.onajax.com/static/2/13/4/1.JPG,http://www.onajax.com/static/2/13/4/2.JPG,http://www.onajax.com/static/2/13/4/3.JPG",
            "price":2578.52,
            "price_preferential":2578.1,
            "saledcount":15,
            "brand_id":0,
            "content":"",
            "num":0
        },
        {
            "id":2073,
            "intro":"HP/惠普 星14S 英寸青春版轻薄工作笔记本电脑办公用商务手提便携14寸2019新款新品学生女生官方旗舰店官网",
            "cid":9,
            "name":"HP/惠普 星14S 英寸青春版轻薄工作笔记本电脑办公用商务手提便携14寸2019新款新品学生女生官方旗舰店官网",
            "photo_little":"http://www.onajax.com/static/2/11/7/1.JPG",
            "photo_lists":"http://www.onajax.com/static/2/11/7/1.JPG,http://www.onajax.com/static/2/11/7/2.JPG,http://www.onajax.com/static/2/11/7/3.JPG",
            "price":466.57,
            "price_preferential":466.86,
            "saledcount":10,
            "brand_id":0,
            "content":"",
            "num":0
        },
        {
            "id":1919,
            "intro":"华为旗下HONOR/荣耀MagicBook 14锐龙R5-3500U 14英寸笔记本电脑轻薄便携商务本学生",
            "cid":11,
            "name":"华为旗下HONOR/荣耀MagicBook 14锐龙R5-3500U 14英寸笔记本电脑轻薄便携商务本学生",
            "photo_little":"http://www.onajax.com/static/2/11/3/1.JPG",
            "photo_lists":"http://www.onajax.com/static/2/11/3/1.JPG,http://www.onajax.com/static/2/11/3/2.JPG,http://www.onajax.com/static/2/11/3/3.JPG",
            "price":3300.52,
            "price_preferential":3300.81,
            "saledcount":9,
            "brand_id":0,
            "content":"",
            "num":0
        }
    ],
    "msg":"数据获取成功",
    "status":1
}

将json格式的数据转换成指定的编程语言(比如go,java,python)中的数据结构时,常用的规则(并不是全部,具体视不同编程语言而定):

  • json对象映射成指定编程语言中的hash/struct,有时候没有合适的结构,将映射成类。其实class、hash、struct在数据组织方式上都是一样的,都是key/value的容器
  • json数组映射成语言中的列表/数组/切片

上面json格式的数据转换成Go中的数据结构时,得到的结果如下:

type ProductList struct {
	Data []Data `json:"data"`
	Msg string `json:"msg"`
	Status int `json:"status"`
}
type Data struct {
	ID int `json:"id"`
	Intro string `json:"intro"`
	Cid int `json:"cid"`
	Name string `json:"name"`
	PhotoLittle string `json:"photo_little"`
	PhotoLists string `json:"photo_lists"`
	Price float64 `json:"price"`
	PricePreferential float64 `json:"price_preferential"`
	Saledcount int `json:"saledcount"`
	BrandID int `json:"brand_id"`
	Content string `json:"content"`
	Num int `json:"num"`
}

json转go数据结构工具

http://tools.luboke.com/json2go.html

将json格式的数据转换成golang 结构体

文章作者: 全栈编程@luboke.com
版权声明: 本文章为全栈编程go语言体系课视频教程配套电子书,版权归 全栈编程@luboke.com所有,欢迎免费学习,转载必须注明出处!但禁止任何商业用途,否则将受到法律制裁!
copyright © 2020 全栈编程@luboke.com