从结构上看,所有的数据最终都可以分解成三种类型:
- 标量(scalar):一个单独的字符串或数字,如”北京”。
- 序列(sequence):若干相关数据按顺序并列,又称数组(array)或列表(list),如”北京,上海”。
- 映射(mapping):名值对(name/value),又称散列(hash)或字典(dictionary),如”首都:北京”。
数据构成的最小单位原来如此简单——难怪编程语言里只要有了数组和对象,就能存储一切数据。
JSON 的四条规则
- 并列的数据之间用逗号(
,)分隔; - 映射用冒号(
:)表示; - 数组用方括号(
[])表示; - 对象用大括号(
{})表示。
这四条规则就是 JSON 格式的全部内容。比如:
北京市的面积为 16800 平方公里,常住人口 1600 万人。
上海市的面积为 6400 平方公里,常住人口 1800 万。
写成 JSON:
[
{"城市":"北京","面积":16800,"人口":1600},
{"城市":"上海","面积":6400,"人口":1800}
]
如果事先知道数据结构,可进一步简化:
[
["北京",16800,1600],
["上海",6400,1800]
]
JSON 非常易学易用,短短几年就取代 XML,成为互联网上最受欢迎的数据交换格式。
数组 vs 对象
学习 JavaScript 时,容易搞不清数组和对象的区别——两者都能表示数据集合。比如数组 a=[1,2,3,4] 和对象 a={0:1,1:2,2:3,3:4},访问 a[1] 的结果相同。
区别在于:
- 数组表示有序数据的集合;
- 对象表示无序数据的集合。
数据顺序很重要时用数组,否则用对象。另一个区别是:数组的数据没有名称,对象的数据有名称。
很多编程语言中还有一种”关联数组”(associative array),其数据是有名称的。比如在 JavaScript 中定义对象:
var a={"城市":"北京","面积":16800,"人口":1600};
也可以定义成关联数组:
a["城市"]="北京";
a["面积"]=16800;
a["人口"]=1600;