JSON.stringify()语法:
JSON.stringify(value[, replacer [, space]])
除了要序列化的javascript对象外,还可以接收另外的2个可选参数。
其中,replacer是个过滤器,可以是一个数组或者对象;
space控制结果中的缩进和空白符,可以是一个数值或者字符串。
我们先定义一个的JSON格式数据,下面会用到:
var obj = {
"username":"hello world",
"age":20,
"height":"185cm",
"address":"Shanghai"
}
可选参数1:replacer
(1)、如果replacer是个数组,那么JSON.stringify的结果中只包含数组中列出的属性。
JSON.stringify(obj, ["age","address"]);
//结果:{"age":20,"address":"Shanghai"}
(2)、如果replacer是个函数,那么JSON.stringify的结果会根据函数逻辑进行过滤。
注意:如果函数返回undefined,那么对应的属性会被忽略。
JSON.stringify(obj, function(key, val){
switch(key){
case "username":
return "javascript";
case "age":
return 10;
case "height":
return undefined; //height属性会被忽略
default:
return val;
}
});
//结果:{"username":"javascript","age":10,"address":"Shanghai"}
可选参数2:space
space最大长度为10,如果大于10,自动转化为10
(1)、如果space是一个数值,则代表每个级别缩进的空格数。
JSON.stringify(obj, null, 10);
// 结果:
{
"username": "hello world",
"age": 20,
"height": "185cm",
"address": "Shanghai"
}
(2)、如果space是一个字符串,这个字符串将被用作缩进字符。
JSON.stringify(obj, null, "#");
//结果:
{
#"username": "hello world",
#"age": 20,
#"height": "185cm",
#"address": "Shanghai"
}
toJSON()方法:
定义一个toJSON()方法,也可以自定义返回自身的JSON数据格式。
比如下面的:
var obj = {
"username":"hello world",
"age":20,
"height":"185cm",
"address":"Shanghai",
toJSON: function(){
return this.username;
}
}
JSON.stringify(obj);
//结果:"hello world"
把一个对象传入JSON.stringify(),对象序列化的内部顺序如下: