本文总结自百度百科
JSON 语法规则
-
数据在键值对中
-
数据由逗号分隔
-
花括号保存对象
-
方括号保存数组
JSON 名称/值对
名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:
"firstName":"John"
这很容易理解,等价于这条 JavaScript 语句:
firstName="John"
JSON 值
-
数字(整数或浮点数)
-
字符串(在双引号中)
-
逻辑值(true 或 false)
-
数组(在方括号中)
-
对象(在花括号中)
-
null
基础结构
基础示例
简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是JavaScript很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。
名称 / 值对
{"firstName":"Brett"}
这个示例非常基本,而且实际上比等效的纯文本"名称 / 值对"占用更多的空间:
firstName=Brett
但是,当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个"名称 / 值对"的 记录,比如:
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}
从语法方面来看,这与"名称 / 值对"相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。
表示数组
{ "people":[ {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}, {"firstName":"Jason","lastName":"Hunter","email":"bbbb"}, {"firstName":"Elliotte","lastName":"Harold","email":"cccc"} ] }
这不难理解。在这个示例中,只有一个名为 people的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):
{ "programmers": [{ "firstName": "Brett", "lastName": "McLaughlin", "email": "aaaa" }, { "firstName": "Jason", "lastName": "Hunter", "email": "bbbb" }, { "firstName": "Elliotte", "lastName": "Harold", "email": "cccc" }], "authors": [{ "firstName": "Isaac", "lastName": "Asimov", "genre": "sciencefiction" }, { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }, { "firstName": "Frank", "lastName": "Peretti", "genre": "christianfiction" }], "musicians": [{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }, { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }] }
格式应用
赋值给变量
1 var people = { 2 "programmers": [{ 3 "firstName": "Brett", 4 "lastName": "McLaughlin", 5 "email": "aaaa" 6 }, { 7 "firstName": "Jason", 8 "lastName": "Hunter", 9 "email": "bbbb" 10 }, { 11 "firstName": "Elliotte", 12 "lastName": "Harold", 13 "email": "cccc" 14 }], 15 "authors": [{ 16 "firstName": "Isaac", 17 "lastName": "Asimov", 18 "genre": "sciencefiction" 19 }, { 20 "firstName": "Tad", 21 "lastName": "Williams", 22 "genre": "fantasy" 23 }, { 24 "firstName": "Frank", 25 "lastName": "Peretti", 26 "genre": "christianfiction" 27 }], 28 "musicians": [{ 29 "firstName": "Eric", 30 "lastName": "Clapton", 31 "instrument": "guitar" 32 }, { 33 "firstName": "Sergei", 34 "lastName": "Rachmaninoff", 35 "instrument": "piano" 36 }] 37 };
这非常简单;people包含前面看到的 JSON 格式的数据。但是,这还不够,因为访问数据的方式似乎还不明显。
访问数据
people.programmers[0].lastName;
注意,数组索引是从零开始的。所以,这行代码首先访问 people变量中的数据;然后移动到称为 programmers的条目,再移动到第一个记录([0]);最后,访问 lastName键的值。结果是字符串值 “McLaughlin”。
1 people.authors[1].genre // Value is "fantasy" 2 people.musicians[3].lastName // Undefined. This refers to the fourth entry, and there isn't one 3 people.programmers[2].firstName // Value is "Elliotte"
利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript 工具包或 API。
修改数据
people.musicians[1].lastName="Rachmaninov";
在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。
换回字符串
JSON嵌套格式
1 { 2 id: '100000', 3 text: '廊坊银行总行', 4 children: [ 5 { 6 id: '110000', 7 text: '廊坊分行', 8 children: [ 9 { 10 id: '113000', 11 text: '廊坊银行开发区支行', 12 leaf: true 13 }, 14 { 15 id: '112000', 16 text: '廊坊银行解放道支行', 17 children: [ 18 { 19 id: '112200', 20 text: '廊坊银行三大街支行', 21 leaf: true 22 }, 23 { 24 id: '112100', 25 text: '廊坊银行广阳道支行', 26 leaf: true 27 } 28 ] 29 }, 30 { 31 id: '111000', 32 text: '廊坊银行金光道支行', 33 leaf: true 34 } 35 ] 36 } 37 ] 38 }
XML格式和JSON格式对一份数据的表示:
XML:
<?xml version="1.0" encoding="utf-8"?> <country> <name>中国</name> <province> <name>黑龙江</name> <cities> <city>哈尔滨</city> <city>大庆</city> </cities> </province> <province> <name>广东</name> <cities> <city>广州</city> <city>深圳</city> <city>珠海</city> </cities> </province> <province> <name>台湾</name> <cities> <city>台北</city> <city>高雄</city> </cities> </province> <province> <name>新疆</name> <cities> <city>乌鲁木齐</city> </cities> </province> </country>
JSON:
{
"name": "中国",
"province": [{
"name": "黑龙江",
"cities": {
"city": ["哈尔滨", "大庆"]
}
}, {
"name": "广东",
"cities": {
"city": ["广州", "深圳", "珠海"]
}
}, {
"name": "台湾",
"cities": {
"city": ["台北", "高雄"]
}
}, {
"name": "新疆",
"cities": {
"city": ["乌鲁木齐"]
}
}]
}
本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5777342.html,如需转载请自行联系原作者