JSON
JSON 是 JS 对象的一种简单紧凑的标签。
JSON 语法
JSON 数据的表示方式是一系列成对的参数与值,参数与值由冒号分割,每对之间以逗号分隔:
{"par1":"val1","par2":"val2","par3":"val3","par4":"val4"}
把这些数据用花括号包起来,构成表示数据的 JSON 对象:
// 使用 JSON 标签定义 JSON 数据对象
var jsonObj = {
"par1":"val1",
"par2":"val2",
"par3":"val3",
"par4":"val4"
}
// JSON 对象也具有属性和方法,可以用句点标签进行访问
console.log(jsonObj.par1); // 显示 val1
注意: json 数据和 json 对象是不一样的。
JSON 数据访问及生成
使用 eval() 函数解析 JSON 数据(可能存在安全问题,不建议使用)
eval() 函数使用 JS 解释程序解析 JSON 文本来生成 JS 对象,语法如下:
var myObj = eval('('+ jsonString +')');
用例:
// 接收 JSON 数据
var jsonStr = '{"par1":"val1","par2":"val2","par3":"val3","par4":"val4"}';
// 解析 JSON 数据,创建 JSON 数据对象
var jsonObj = eval('('+ jsonStr +')');
// 访问数据
console.log(jsonObj.par1);
使用浏览器对 JSON 直接支持
比较新的浏览器会创建一个名为 JSON 的 JS 对象来管理 JSON 的编码和解码。这两个方法为 stringify() 和 parse() 。
JSON.parse() 解析 JSON 数据
JSON.parse()接收一个字符串作为参数,解析它,创建一个对象,并根据字符串里发现的“参数”:“值”对设置对象的参数。以上例 jsonStr 字符串为例:
// 解析 JSON 数据,创建对象
var jsonObj2 = JSON.parse(jsonStr);
// 遍历 JSON
for(i in jsonObj2){
console.log(i+':'+jsonObj2[i]);
}
// 直接访问数据
console.log(jsonObj2.par1);
console.log(jsonObj2['par1']);
Tips:在JS里,jsonObj2.par1 和 jsonObj2['par1'] 是相同的语法
JSON 数据序列化: JSON.stringify()
JSON 的数据序列化是指把数据转换为 JSON 数据(字符串),以便存储和传输。
JSON.stringify(Object) 方法可以创建对象的 JSON 编码字符串:
// 首先创建一个简单的对象,并添加一些属性
var Joe = new Object();
Joe.age = 30;
Joe.h = 180 ;
Joe.name = 'joe';
// 数据序列化
var str2 = JSON.stringify(Joe);
// 查看序列化后的数据
console.log(str2);
JSON 数据类型
“参数”:“值” 对里的参数部分应遵循:
- 不能是 JS 保留的关键字
- 不能以数字开头
- 除了下划线和美元符号,不能包括任何特殊字符
“值”部分可以是如下类型:
- 数值
- 字符串
- 布尔值
- 数组
- 对象
- null
使用 JSON 创建对象
在上面 JSON语法 中我们使用 var jsonObj = {"par1":"val1","par2":"val2","par3":"val3","par4":"val4"} 创建了对象并设置了属性,同样我们也可以添加方法,同时,“值”也可以是多种类型的数据:
// 使用 JSON 标签定义 JSON 数据对象
var jsonObj = {
"par1":"val1",
"par2":"val2",
"par3":"val3",
"par4":"val4",
// 创建方法
"jFun":function(){
// code
},
// 数组数据
"num":[1,2,3,4],
// 对象数据
"oobj":{"p1":1},
// 数组+对象
"numOb":[{"p2":2},{"p3":3}]
}
// 访问对象
jsonObj.jFun();
console.log(jsonObj.num);
console.log(jsonObj.num[1]);
console.log(jsonObj.oobj);
console.log(jsonObj.oobj.p1);
console.log(jsonObj.numOb);
console.log(jsonObj.numOb[0].p2);
console.log(jsonObj.numOb[0]['p2']);
全文结束