[{"title":"Professional JavaScript","authors":["Nicholas C. Zakas"],"edition":3,"year":2011},{"title":"Professional JavaScript","authors":["Nicholas C. Zakas"],"edition":2,"year":2009}]
20.2 解析与序列化
JSON数据结构解析为JavaScript对象比XML解析为DOM对象进行查询更方便
20.2.1 JSON对象
ECMAScript 5定义了全局对象JSON
JSON对象的方法
stringify()
对象中的函数以及原型成员会被忽略
parse()
值为undefined的任何属性会被忽略
20.2.2 序列化选项
stringify()除接收需要序列化的javascript对象外,还接收另外两个参数
过滤器
数组
函数
格式
20.2.2.1 过滤结果
数组
结果中只包含数组中列出的属性
函数
函数传入两个参数
属性名
属性值
返回值
序列化键值或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":return5000;case"edition":return undefined;default:return value;}});
20.2.2.2 字符串缩进
数字
每个级别缩进的空格数,自动换行
字符串
缩进字符设置为该字符串,而不是空格
var jsonText = JSON.stringify(book, null, “–”);
20.2.2.3 toJson()方法
序列化顺序
调用对象上的toJSON()方法并能取得有效值,若无则按默认顺序执行序列化
过滤器,传入上一步的结果
格式化
var book ={"title":"Professional JavaScript","authors":["Nicholas C. Zakas"],"edition":3,"year":2011,
toJSON:function(){returnthis.title;}};var jsonText =JSON.stringify(book);
20.2.3 解析选项
parse()除接收需要解析的JSON字符串外,还接收另一个参数
还原函数
传入键、值
返回undefined,表示从结果中删除该键
var book ={"title":"Professional JavaScript","authors":["Nicholas C. Zakas"],"edition":3,"year":2011,
releaseDate:newDate(2011,11,1)};var jsonText =JSON.stringify(book);var bookCopy =JSON.parse(jsonText,function(key,value){if(key=="releaseDate"){//将日期字符串复原为Date对象returnnewDate(value);}else{return value;}});alert(bookCopy.releaseDate.getFullYear());