前言
JSON中的stringify和parse分别是用于将JavaScript转化为JSON对象和将JSON对象解析为JavaScript对象。
用法
1.stringify
语法:JSON.stringify(value [,replacer] [,space])
stringify方法除了可以序列化JS对象外,还接收两个参数,一个是过滤器(replacer),当replacer为数组时,表示筛选出满足这个数组中的属性的元素,当replacer为函数时,传入函数接收两个参数:键-值,根据键名可以知道如何处理序列化的对象中的属性值,且键名只能是字符串(当值并非键值对结构的值时,键名可以为空字符串); 一个表示在JSON字符串中是否保留缩进,该值可以为数字、非空字符串,且不能超过10个字符长度。
示例:(JS高级编程)
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; //通过返回undefined删除该属性 default: //必须有default return value } });
序列化对象的顺序:
(1)如果存在toJSON()方法且能通过它取得有效值,则调用该方法,否则返回对象本身;
(2)提供的第二个参数,应用这个函数过滤器,传入函数过滤器的值是第一步返回的值;
(3)对第二步返回的每个值进行相应的序列化;
(4)如果提供第三个参数,则执行相应的格式化。
2.parse
语法: JSON.parse(value [,reviver])
parse方法同stringify类似,也可以接受一个函数作为参数,如果还原函数返回undefined,则表示要从结果中删除相应的键值,若返回其他值,则将该值插入到结果中。
示例:
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; } }); alert(bookCopy.releaseDate.getFullYear());