所谓数据序列化(Data Serialization), 就是将某个对象的状态信息转换为可以存储或传输的形式的过程。 那么,为什么要进行序列化?
- 首先,为了方便数据存储;
- 其次,为了方便数据传递。
在数据序列化期间,某个对象的当前状态被写入到临时或永久存储区。随后,可以把序列化到存储区的数据(通过网络)传输出去,然后进行反序列化,重新创建该对象。 运行在节点A上的某个对象X的当前状态,可以理解为保存在节点A的内存里的某个结构体。那么要把节点A上的对象X的状态信息传递到节点B上,把对象X的状态信息从内存中dump出来并序列化是必不可少的。支持数据序列化的常见格式有XML(Extensible Markup Language), JSON 和YAML。接下来本系列将首先介绍一下JSON。
1. 什么是JSON?
JSON是JavaScript Object Notation的缩写。简单来说,JSON是一种轻量级的数据交换格式,易于人类阅读和书写,同时也易于机器解析和生成。它基于JavaScript语言而实现, 是open ECMAScript standard的一个子集。 JSON采用完全独立于语言的文本格式,但也使用了类似于C语言家族的习惯。这些特性使得JSON成为了一种理想的数据交换语言。
特别注意的是: JSON的字符串必须用双引号引用起来。
2. 构建JSON的结构
- A collection of name/value pairs(键/值对集合), 即对象(object), 也就是字典(dict)。使用{ }表示,与Python的dict类似。
- An ordered list of values (值的有序表),即数组(array)。使用[ ]表示,与Python的list类似。
注意:上面的截图来源戳这里。
2.1 对象(object)
在其他语言中,对象(object)又称为字典(dict),纪录(record),结构(struct),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。在JSON中,通常把键/值对集合称之为对象(Object)(P.S. 本人习惯于字典的叫法)。对象是一个无序的“‘键/值’对”集合。一个对象以“{”开始,“}”结束。每个“键”后跟一个“:”(冒号);“‘键/值’ 对”之间使用“,”(逗号)分隔。例如:
1 var Goddess = { 2 "FirstName" : "Grace", 3 "LastName" : "Liu", 4 "Age" : "18" 5 };
2.2 数组(array)
数组很好理解,跟C语言的数组没什么不同,跟Python的list一样。数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。例如:
1 var Students = [ 2 {"name":"John", "age":"23", "city":"Agra"}, 3 {"name":"Steve", "age":"28", "city":"Delhi"}, 4 {"name":"Peter", "age":"32", "city":"Chennai"}, 5 {"name":"Chaitanya", "age":"28", "city":"Bangalore"} 6 ];
3. 值(value)的类型
- 字符串(string)
- 数字(number)
- 对象(object(即字典))
- 数组(array)
- 布尔值(boolean)
- 空值(null)
3.1 字符串(string)
- 字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。
- 单个字符(character)即一个单独的字符串(character string)。
- 字符串(string)与C语言的字符串非常相似。
3.2 数值(number)
- 数值(number)也与C的数值非常相似。
- 不使用8进制和16进制编码。
参考资料: