JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 以文本形式存在,既然谈到格式,说明这玩意就是一个约定。比如服务器(Java实现)与前端(可能是网页可能是PC端)进行数据交互,很多都用Json。
JSON建构于两种结构:
- “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它(值)被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
- 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
根据上面两个定义举例说明这两种JSON包:
{
"aa": 1,
"bb": 2.2,
"cc": "abc",
"dc": {
"ee": 33,
"ff": 44.44
},
"gg": [5, 6.6, "I love you"]
}
[
1,
22.2,
{
"aa": 11,
"bb": 22.2
},
[55, 77.7, {"dd": 2}]
]
要不然是一个object(以“{”开头,以“}”结尾),要不然是一个array(以“[”开头,以“]”结尾)。
Json中文网:http://www.json.org/json-zh.html。这里主要对这个网站里几张图做一下分析。
JSON具有以下这些形式:
值(value)可以是双引号括起来的字符串(string)、数值(number)、true
、false
、 null
、对象(object)或者数组(array)。这些结构可以嵌套。
这里除了object和value之外,其余的都是简单类型,很好理解。而object和array会有嵌套操作。
对象(object)是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
我认为这里的重点是,“无序的“‘名称/值’对”集合”,你不能这里面加一个value,也不能加一个object(即object嵌套object),亦不能是array,反正只能是 “名称/值”对。举个例子:
{
1,
“name”:“Jack”,
“girfriend”:null,
{"height":1.81}
[1,"hello",{"Kobe":"mvp"}]
"Thunder":{"威少":"劲爆"},
"Warrior”:[{"Curry":"超远三方","杜兰特"}]
}
这里第一个,第四个和第五个元素会导致错误,因为object里面只能是键值对。第六,七个是可以的,因为它们是‘名称/值’对,只不过,它们的值分别是object和array(这里就可以产生嵌套,并不是直接嵌套,而是把object和array放到‘名称/值’ 的 ‘值’里)。
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
object是无序的“名称/值”对集合,array是value的有序集合,这应该是整个Json最难点。举个例子:
[
1,
“瞎写的”,
null,
"myname":"李小乾”,
{"name":"Jack","age":13},
[{"name":"Bob"},{"father":"James"}]
]
这里的第四个元素是错误的,因为它不是value的一种啊。记住,“名称/值”对不是value。
第五个元素是一个object,array可以嵌套object。第六个元素是一个array,array可以嵌套自己。
string与number格式,这里不讲。