2020-9-9日:序列化选项;JSON.stringify() ;JSON.parse() ;
- JSON.stringify() ;
参数(3个参数):
- 要序列化的 JavaScript对象外;
- 过滤器 ;可以是一个数组,也可 以是一个函数;
- 一个选项:表示是否在 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; } });
Made by ---- Rise To The Heightest Then Qualitative Change

浙公网安备 33010602011771号