JSON 格式数据经过解析之后,可以直接当成 ECMAScript 中的对象来使用。在使用 JSON 格式时的一个重要问题是如何在 ECMAScript 中的对象与文本形式之间进行互相转换。从服务器端通过 HTTP 协议获取的 JSON 文本需要经过解析之后,才能在 ECMAScript 代码中来使用;当需要向服务器端发送数据时,需要先把 ECMAScript 中的对象转换成文本格式。在 ECMAScript 规范第三版中并没有对 JSON 格式数据的转换进行规范,大多数程序都依靠 JavaScript 框架来提供相关的支持。
ECMAScript 规范第五版提供了2个处理JSON对象和js对象相互转换的方法:
JSON.parse(): 将JSON 文本转换成相应的对象。
例如:
var jsonStr = '{"a":1, "b":2, "c":3}';
JSON.parse(jsonStr); //不使用第二个参数:返回一个对象
JSON.parse(jsonStr, function(key, value) {
return typeof value === 'number' ? value * 2 : value;
}); //函数做为第二个参数,可以有过滤效果。 结果为 {a:2, b:4, c:6}
JSON.parse(jsonStr, function(key, value) {
return typeof value === 'number' && value % 2 === 0 ? undefined : value;
}); //过滤结果为undefined的不会出现在结果中。 结果为 {a:1, b:3}
JSON.stringify(a,b,c):将 ECMAScript 中的对象转换成 JSON 文本:
a: 待转换的对象,
b: 可以为数组或函数
c: 控制结果中行的缩进,一般为小于10的值
例如:
var user = {
name : 'Alex',
password : 'password',
email : '[email protected]'
};
JSON.stringify(user); //转换为对象
JSON.stringify(user, ['name','password']); //只获取数组中出现属性, 输出结果为“{"name":"Alex","password" : "password"}”
JSON.stringify(user, function(key, value) {
if (key === 'email') {
return '******';
}
if (key === 'password') {
return undefined;
}
return value;
}); //undefined不会出现在结果中, 输出结果为“{"name":"Alex","email":"******"}”
JSON.stringify(user, null, 4); //结果缩进4个空格