深入浅出Javascript:JSON对象
ES5提供一个全局的JSON对象,
用来序列化(JSON.stringify)和反序列化(JSON.parse)对象为JSON格式。
JSON.stringify
JSON.stringify(value [, replacer [, space]])
允许接受一个ECMAScript值然后转换成JSON格式的字符串。
在其最简单的形式中,JSON.stringify接受一个值返回一个字符串,
var asd = JSON.stringify({a: "1"}) //undefined
typeof asd; //"string"
console.info(asd);// '{"a": "1"}'
如果我们需要改变值字符串化的方式,或是对我们选择的提供过滤,我们可以将其传给replacer函数。
如果replacer方法返回undefined, 则键值对就不会包含在最终的JSON中。
var asd = { 'a': 1, 's': 2,'d':3}
var as = JSON.stringify(asd, function(key, value){
//过滤出即将被字符串化的对象中值为3的属性
if (value == 3) {
return undefined;
} else {
return value;
}
});
console.info(as);
// ' { "a": 1, "s": 2}'
我们同样可以传递一个space参数以便获得返回结果的可读性帮助。space参数可以是个数字,表明了作缩进的JSON字符串或字符串每个水平上缩进的空格数。如果参数是个超过10的数值,或是超过10个字符的字符串,将导致取数值10或是截取前10个字符。
var asdf = { "a": 1, "s": 2, "d":3, "f":4'}
var as2 = JSON.stringify(asdf, function(key, value) {
if (value == 3) {
return undefined;
} else {
return value;
}
}, 2);
console.info(as2);
// '{
"a": 1,
"s": 2,
"f":4
}'
JSON.parse
JSON.parse(text [, reviver])
接受文本(JSON格式)并转换成一个ECMAScript值。
该可选的reviver参数是有带有key和value两个参数的函数,
其作用于结果——让过滤和转换返回值成为可能。
var result = JSON.parse('{"a": 1, "b": "2"}');//Object
result.b//"2"
如果我们想确保解析的值是个整数,我们可以使用reviver方法。
var result = JSON.parse('{"a": 1, "b": "2"}', function(key, value){
if (typeof value == 'string'){
return parseInt(value);
} else {
return value;
}
});
result.b //2