1

深入浅出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

幸运儿
916 声望139 粉丝

引用和评论

0 条评论