一, JSON 对象
全局 JSON 对象有两个方法: stringify() 和 parse(), 分别用于把 JavaScript 对象序列化为 JSON 字符串和 JSON 字符串解析成原生 JavaScript 对象.
1. 序列化选项
JSON.stringify() 除了接收一个要序列化的 JavaScript 对象外, 还可以接受另外两个参数, 用以指定序列化对象的方式. 第二个参数是一个过滤器, 可以是一个数组, 也可以是一个函数; 第三个参数是一个选项, 表示是否在 JSON 字符串中保留缩进.
(1) 过滤结果
a. 如果过滤器参数是数组: JSON.stringify() 的结果中将只包含数组中列出的属性.
例如:
- var book = {
- "title": "JavaScript",
- "author": ["Nicholas C. Zakas"],
- edition: 3,
- year: 2011
- };
- var jsonText = JSON.stringify(book,['title','edition']);
- jsonText;//"{"title":"JavaScript","edition":3}"
b. 如果第二个参数是函数: 传入的函数接收两个参数, 属性名和属性值. 根据属性名可以知道应该如何处理要序列化的对象中的属性. 属性名只能是字符串, 而在值并非键值对的结构的值时, 键名可以是空字符串. 为了改变序列化的结果, 函数返回的值就是相应键的值, 如果函数反回了 undefined, 那么相应的属性会被忽略.
- var book = {
- "title": "professional JavaScript",
- "authors": [
- "Nicholas C. Zakas"
- ],
- edition: 3,
- year:2011
- };
- var jsonText = JSON.stringify(book, function(key,value){
- switch(key){
- case "authors":
- return value.join(",");
- case "year":
- return 5000;
- case "edition":
- return undefined;
- default:
- return value;
- }
- });
- jsonText;// "{"title":"professional JavaScript","authors":"Nicholas C. Zakas","year":5000}"
(2) 字符串缩进
JSON.stringify() 方法的第三个参数用于控制结果中的缩进和空白符.
a. 如果这个参数是一个数值, 表示每个级别缩进的空格数.
- var text = JSON.stringify(book,null,4);
- text;//
- "{"title":"professional JavaScript","authors": ["Nicholas C. Zakas"],"edition": 3,"year": 2011
- }"
b. 如果缩进是一个字符串: 则这个字符串将在 JSON 字符串中被用作缩进字符.
c. 缩进字符最长不能超过十个.
2. 解析选项
JSON.parse() 方法可以接受第二个参数, 改参数是一个函数, 将在每个键值对上调用. 这个接受两个参数, 键和值, 都需要一个返回值. 如果返回 undefined , 则表示要从结果中删除相应的键; 如果返回其他值, 则将该值插入到结果中.
来源: http://www.qdfuns.com/article/46690/ff75e7df5634944aef7161277deca928.html