2020-9-9日:序列化选项;JSON.stringify() ;JSON.parse() ;

  • JSON.stringify() ;

参数(3个参数):

  1. 要序列化的 JavaScript对象外; 
  2. 过滤器 ;可以是一个数组,也可 以是一个函数;
  3. 一个选项:表示是否在 JSON字符串中保留缩进;

例子:

  • 第二个参数:

第二个参数为一个数组;

var book = {
        "title": "Professional JavaScript",
        "authors": ["Nicholas C. Zakas"],
        edition: 3,
        year: 2011
    };
    var jsonText = JSON.stringify(book, ["title", "edition"]); // 第二个参数是一个数组,其中包含两个字符串,返回的结果字符串中,就只会包含这两个属性;

返回的结果:

{"title":"Professional JavaScript","edition":3} 

第二个参数为一个函数;

传入的函数接收两个参数,属性(键)名 和 属性值;

 

var jsonText = JSON.stringify(book, function (key, value) {
        switch (key) {
            case "authors": return value.join(",")  // 数组连接为一个字符串
            case "year": return 5000;
            case "edition": return undefined;  // 返回undefined ,属性会被忽略;
            default: return value;
        }
    });

返回结果:

{"title":"Professional JavaScript","authors":"Nicholas C. Zakas","year":5000} 
  • 第三个参数:

作用:控制结果中的缩进和空白符;

第三个参数为一个数值;

表示的是每个级别缩进的空格数;

最大缩进空 格数为 10,所有大于 10的值都会自动转换为 10。

 

第三个参数为一个字符串;

被用作缩进字符;

超过了 10 个,结果中将只出现前 10 个字 符

效果:

var jsonText = JSON.stringify(book, null, " - -"); 


{ 
    --"title": "Professional JavaScript", 
    --"authors": [ ----"Nicholas C. Zakas" --], 
    --"edition": 3, 
    --"year": 2011 
} 

 

  • toJSON()方法 ;

可以为任何对象添加 toJSON()方法;

toJSON 直接对当前对象进行修改 ;

toJSON 的返回值直接代替了当前对象 ;

var book = {
            "title": "Professional JavaScript", 
            "authors": ["Nicholas C. Zakas"], 
            edition: 3, 
            year: 2011, 
       toJSON: function () { // 直接将book对象特换为了return 的this.title 即"Professional JavaScript";
          return this.title; 
        }
};
var jsonText = JSON.stringify(book);// 此时的book = 'Professional JavaScript';
console.log(jsonText);  // 输出 "Professional JavaScript";  toJSON 直接对当前对象进行修改; toJSON 的返回值直接代替了当前对象
  • 序列化该对象的顺序

(1): 如果存在 toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,返回对象本身;

(2) :如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值; // 如果第二参数是个函数过滤器, 传入的操作对象是第(1)里面被toJSON()处理后返回的新数据;

(3) :对第(2)步返回的每个值进行相应的序列化;

(4) :如果提供了第三个参数,执行相应的格式化; 

 

  • JSON.parse()方法 ;
var book = {
        "title": "Professional JavaScript",
        "authors": ["Nicholas C. Zakas"],
        edition: 3,
        year: 2011,
        releaseDate: new Date(2011, 11, 1)
    };
    var jsonText = JSON.stringify(book);

    var bookCopy = JSON.parse(jsonText, function (key, value) { //  称为:还原函数;
        if (key == "releaseDate") {
            return new Date(value);
        } else {
            return value;  // 此处假设改成return 1; 会修改整个对象; 导致bookCopy最终返回结果为 1;
        }
    });

 

posted @ 2020-09-09 17:35  Amber丶Li  阅读(79)  评论(0)    收藏  举报