JSON--stringify() 和 parse() 方法
序列化:stringify()
将JavaScript对象序列号为JSON字符串
反序列化:parse()
将JSON字符串解析为原生JavaScript值
序列化选项:
JSON.stringify()除了可以序列化JavaScript对象外,还可以接收另外两个参数,这两个参数用于指定以不同的方式序列化JavaScript对象,第一个参数是过滤器,第二个参数是选项,表示是否在 json字符串中保留缩进
- 过滤器:可以是一个数组也可以是一个函数
例如:
一个数组:1 var user= { 2 title: '解忧杂货店', 3 author: '东野圭吾', 4 edition: 10, 5 date: '2012-03' 6 }; 7 var jsonText =JSON.stringify(user); 8 console.log(jsonText); 9 var jsonText0 =JSON.stringify(user,["title","author"]); 10 console.log(jsonText0);
控制台返回的数据如下:
一个函数:1 var user= { 2 title: '解忧杂货店', 3 author: '东野圭吾', 4 edition: 10, 5 date: '2012-03' 6 }; 7 var jsonText =JSON.stringify(user,function(key,value){ 8 switch(key){ 9 case "title": 10 return 'xxxx'; 11 case "author": 12 return undefined; 13 default: 14 return value; 15 } 16 }); 17 console.log(jsonText)
控制台返回的数据如下:
- 字符串缩进
JSON.stringify()方法的第三个参数用于控制结果中的缩进和空白符
例如:
1 var user= { 2 title: '解忧杂货店', 3 author: '东野圭吾', 4 edition: 10, 5 date: '2012-03' 6 }; 7 var jsonText0 =JSON.stringify(user); 8 console.log(jsonText0) 9 var jsonText =JSON.stringify(user,null,4); 10 console.log(jsonText)
控制台返回的结果:
由上面可以看出缩进与不缩进的结果,相对来说缩进的可读性强;
注意:缩进的值范围在10 以内大于10的都讲自动装换为10
如果将上面的第三个参数的数字换成符号也可以例如换成 “--”
效果如下:注意:这里的缩进字符串最长不能超过10个字符,如果超过10个字符,结果中只出现前10个字符
- toJSON()方法
作为JSON.stringify中第二个参数(函数过滤器)补充
方法: date.toJSON()
返回任何序列化的值
例如:1 var user= { 2 title: '解忧杂货店', 3 author: '东野圭吾', 4 edition: 10, 5 date: '2012-03', 6 toJSON: function(){ 7 //只返回author 8 return this.author; 9 } 10 }; 11 var jsonText0 =JSON.stringify(user); 12 console.log(jsonText0)
控制台返回的结果: -
toJSON()作为JSON.stringify中第二个参数(函数过滤器)补充,理解内部顺序很重要。
假设把一个对象传入JSON.stringify() 序列化对象的顺序如下:
(1)如果存在toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,按默认顺序执行序列化
(2)如果提供了第二个参数,应用这个函数过滤器,传入的函数过滤器的值是第(1)步返回的值。
(3)对第(2)步 返回的每个值进行相应的序列化。
(4)如果提供了第三个参数,执行相应的格式化操作。
解析选项:
JSON.parse()方法也可以接收另一个参数,改参数是一个函数,讲在买个键值对上调用,为区别JSON.stringify()方法接收的过滤器(有可能是函数的函数(replace)),在这里的函数叫还原函数(reviver)。接收两个参数,一个键和一个值,并且需要返回一个值。
例如:
1 var user= { 2 title: '解忧杂货店', 3 author: '东野圭吾', 4 edition: 10, 5 date: '2012-03', 6 releaseDate: new Date(2017,11,28) 7 }; 8 9 var jsonText1 =JSON.parse(jsonText0,function(key,value){ 10 if(key == "releaseDate"){ 11 return new Date(value) 12 }else{ 13 return value 14 } 15 }); 16 console.log(jsonText1.releaseDate)
控制台返回的结果:
简单来说就这样我们就解析后的内容中获取需要的年月日等内容。