JSON.stringify()、JSON.parse()、toJSON()中过滤器的用法(一)

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(),对象序列化的内部顺序如下:

  1. 如果存在toJSON()方法且返回有效值,则调用toJSON()。否则返回对象本身。
  2. 如果提供第二个参数,则应用函数过滤器。
  3. 如果提供第三个参数,则进行格式化。

你可能感兴趣的:(javascript,工具,浏览器,html)