自动摘要: 相比于XML,JSON格式最大的优点是易于人的阅读和编写,通常不需要特殊的工具,就能读懂和修改,是一种轻量级的数据交换格式。JSON文件都是被包裹在一个大括号中{},通过keyvalue的方式来 ……..
相比于XML ,JSON格式最大的优点是易于人的阅读和编写,通常不需要特殊的工具,就能读懂和修改,是一种轻量级的数据交换格式。JSON文件都是被包裹在一个大括号中 {},通过key-value的方式来表达数据。JSON的值只能是以下几种数据格式:
- 数字,包含浮点数和整数
- 字符串,需要包裹在双引号中
- Bool值,true 或者 false
- 数组,需要包裹在方括号中 []
- 对象,需要包裹在大括号中 {}
- Null
其他任何格式都会触发报错,例如 JavaScript 中的 undefined。JSON不支持注释
JSON指的是JavaScript对象表示法(JavaScript Object Notation)
JSON独立于语言:JSON使用JavaScript语法描述数据对象。JSON解析器和JSON库支持许多不同的编程语言。
JSON和XML比较
- 相同之处
- JSON纯文本
- JSON具有“自我描述性”(人类可读)
- JSON具有层级结构(值中存在值)
- JSON可通过JavaScript进行解析
- JSON数据可通过AJAX进行传输
- 不同之处
- 没有结束标签
- 更短
- 读写的速度更快
- 能够使用内建的JavaScript eval()方法进行解析
- 使用数组
- 不使用保留字
- 最大的区别:XML需要使用XML解析器来解析,JSON可以使用标准的JavaScript函数解析。JSON.parse(): 将一个JSON字符串转换为JavaScript对象。JSON.stringify(): 将JavaScript值转换为JSON字符串
- 相同之处
JSON语法
- 数据在名称/值对中
- 数据由逗号,分割
- 使用斜杆\来转义字符
- 大括号{}保存对象
- 中括号[]保存数组,数组可以包含多个对象
- JSON文件的文件类型是.json,JSON文本的MIME类型是application/json
- MIME类型是描述信息内容类型的标准,用来表示文档、文件或字节流的性质和格式。MIME信息能包含文本、图像、音频、视频以及其他应用程序专用的数据
JSON对象
- 对象语法
- 大括号{};
- 对象可以包含多个key/value(键/值)对
- key必须是字符串,value可以是合法的JSON数据类型(字符串、数字、对象、数组、布尔值、null)
- key和value中使用冒号:分割
- 每个key/value对使用逗号,分割
- 访问对象值(使用.或使用中括号[])
- myObj = {“name”:”runoob”, “alexa”:10000, “site”:null}; x = myObj.name;
- myObj = {“name”:”runoob”, “alexa”:10000, “site”:null}; x = myObj[“name”];
- 循环对象(for-in循环)
- varmyObj = {“name”:”runoob”, “alexa”:10000, “site”:null}; for(x in myObj){document.getElementById(“demo”).innerHTML += x + “
“; }
- varmyObj = {“name”:”runoob”, “alexa”:10000, “site”:null}; for(x in myObj){document.getElementById(“demo”).innerHTML += x + “
- 删除对象属性
- 使用delete关键字删除:delete myObj.sites.site1;
- 对象语法
JSON数组
数组作为JSON对象,JSON数组在中括号中书写
通过使用索引值访问数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18myObj = {
"name":"网站",
"num":3,
"sites":[ "Google", "Runoob", "Taobao" ]
}
x = myObj.sites[0];
//x = Google
// 循环数组(for-in循环)
var a = "";
for(i in myObj){
a += myObj.sites[i]+"<br>";
}
// for循环
for(var i = 0;i<myObj.sites.length;i++){
x += myObj.sites[i]+"<br>";
}循环数组(可以用for-in循环也可以用for循环)
修改数组值用索引值,删除数组元素用delete关键字来删除数组元素
JSON.parse()
- 服务器返回数据一般是字符串,JSON.parse()方法可以将字符串数据转换为JavaScript对象
- 语法:JSON.parse(text[, reviver]);
- text:必需,一个有效的字符串;reviver:可选,一个转换结果的函数,将为对象的每个成员调用此函数
- 从服务端接收JSON数据或数组的JSON数据
- 使用AJAX从服务器请求JSON数据,并解析为JavaScript对象
- JSON不能存储Date对象,需要存储Date对象时,要先将其转为字符串,然后将字符串转为Date对象(也可以使用JSON.parse的第二个参数reviver,一个转换结果的函数,对象的每个成员调用此函数)
1
2
3
4
5
6
7
8
9
10
11
12var text = '{ "name":"Runoob", "initDate":"2013-12-14", "site":"www.runoob.com"}';
var obj = JSON.parse(text, function (key, value) {
if (key == "initDate") {
return new Date(value);
} else {
return value;
}});
document.getElementById("demo").innerHTML = obj.name + "创建日期:" + obj.initDate;
//JSON.parse()和JavaScript函数eval("("+text+")")都是将字符串JSON文本转换为JavaScript对象
// eval() 函数可编译并执行任何 JavaScript 代码。这隐藏了一个潜在的安全问题。
JSON.stringify()
- 向服务器发送的数据一般是字符串,可以使用JSON.stringify()方法将JavaScript对象转换为字符串
- 语法:JSON.stringify(value[, replacer[, space]])
- value:必需,要转换的JavaScript值(通常为对象或数组)
- replace:可选,用于转换结果的函数或数组。
- space:可选,文本添加缩进、空格和换行符,如果space是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果space大于10,则文本缩进10个空格。space也可以使用非数字,如:\t。
- JSON不能存储Date对象,JSON.stringify()会将所有日期转换为字符串
1
2
3
4var obj = { "name":"runoob", "alexa":10000, "site":"www.runoob.com"};
// myJSON是字符串
var myJSON = JSON.stringify(obj);
document.getElementById("demo").innerHTML = myJSON;