在go语言网络编程中,经常会有这样的需求:保存结构体和读取结构体数据。如果你使用redis数据库存储数据,你怎么做?Redis仅支持五种数据类型( String(字符串) 、Hash (哈希)、List(列表)、Set(集合) 和zset(sorted set:有序集合)),不包括结构体,不能直接存储结构体。如果可以转换为五种数据类型之一,问题就简单了。
本篇文章分析,如何使用JSON处理数据。
一、JSON 基本介绍
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
易于人阅读和编写。同时也易于机器解析和生成。 JSON是在2001年开始推广使用的数据格式,目前已经成为主流的数据格式。
- JSON易于机器解析和生成,并有效地提升网络传输效率,通常程序在网络传输时会先将数据(结构体、map等)序列化成json字符串,到接收方得到json字符串时,在反序列化恢复成原来的数据类型(结构体、map等) 。这种方式已然成为各个语言的标准
二、JSON数据格式说明
任何的数据类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组, map, 结构体等.
JSON 键值对是用来保存 数据一种方式,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值.
如下示例:
[{"key1":val1, "key2":val2, "key3" : val3, "key4":[val4, val5]},
{"key1":val1, "key2":val2, "key3" : val3, "key4":[val4, val5]}]
{"firstName": "Json"}
{"name": "tom", "age": 18, "address":["北京", "上海"]}
[{"name": "tom", "age": 18, "address":["北京", "上海"]},
{"name": "mary", "age": 28, "address":["广州", "深圳"]}]
三、JSON解析工具:
线上网站推荐:https://www.json.cn/ 网站可以验证一个json格式的数据是否正确
线下工具:HiJson 2.1.2_jdk64
四、json序列化go中数据
1、介绍
json序列化是指,将有key-value结构的数据类型(比如结构体、map、切片)序列化成json字符串的操作。
2、源码语法
2.1 type Marshaler
type Marshaler interface {
MarshalJSON() ([]byte, error)
}
实现了Marshaler接口的类型可以将自身序列化为合法的json描述。
2.2 func Marshal
func Marshal(v interface{}) ([]byte, error)
Marshal函数返回v的json编码。
Marshal函数会递归的处理值。如果一个值实现了Marshaler接口切非nil指针,会调用其MarshalJSON方法来生成json编码。nil指针异常并不是严格必需的,但会模拟与UnmarshalJSON的行为类似的必需的异常。
否则,Marshal函数使用下面的基于类型的默认编码格式:
布尔类型编码为json布尔类型。
浮点数、整数和Number类型的值编码为json数字类型。
字符串编码为json字符串。角括号"<"和">"会转义为"\u003c"和"\u003e"以避免