JSON--stringify() 和 parse() 方法
序列化:stringify()
将JavaScript对象序列号为JSON字符串
反序列化:parse()
将JSON字符串解析为原生JavaScript值
序列化选项:
JSON.stringify()除了可以序列化JavaScript对象外,还可以接收另外两个参数,这两个参数用于指定以不同的方式序列化JavaScript对象,第一个参数是过滤器,第二个参数是选项,表示是否在 json字符串中保留缩进
- 过滤器:可以是一个数组也可以是一个函数
例如:
一个数组:var user= {
title: '解忧杂货店',
author: '东野圭吾',
edition: 10,
date: '2012-03'
};
var jsonText =JSON.stringify(user);
console.log(jsonText);
var jsonText0 =JSON.stringify(user,["title","author"]);
console.log(jsonText0);控制台返回的数据如下:

一个函数:
var user= {
title: '解忧杂货店',
author: '东野圭吾',
edition: 10,
date: '2012-03'
};
var jsonText =JSON.stringify(user,function(key,value){
switch(key){
case "title":
return 'xxxx';
case "author":
return undefined;
default:
return value;
}
});
console.log(jsonText)控制台返回的数据如下:

- 字符串缩进
JSON.stringify()方法的第三个参数用于控制结果中的缩进和空白符
例如:
var user= {
title: '解忧杂货店',
author: '东野圭吾',
edition: 10,
date: '2012-03'
};
var jsonText0 =JSON.stringify(user);
console.log(jsonText0)
var jsonText =JSON.stringify(user,null,4);
console.log(jsonText)控制台返回的结果:

由上面可以看出缩进与不缩进的结果,相对来说缩进的可读性强;
注意:缩进的值范围在10 以内大于10的都讲自动装换为10
如果将上面的第三个参数的数字换成符号也可以例如换成 “--”
效果如下:注意:这里的缩进字符串最长不能超过10个字符,如果超过10个字符,结果中只出现前10个字符
- toJSON()方法
作为JSON.stringify中第二个参数(函数过滤器)补充
方法: date.toJSON()
返回任何序列化的值
例如:var user= {
title: '解忧杂货店',
author: '东野圭吾',
edition: 10,
date: '2012-03',
toJSON: function(){
//只返回author
return this.author;
}
};
var jsonText0 =JSON.stringify(user);
console.log(jsonText0)控制台返回的结果:

toJSON()作为JSON.stringify中第二个参数(函数过滤器)补充,理解内部顺序很重要。
假设把一个对象传入JSON.stringify() 序列化对象的顺序如下:
(1)如果存在toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,按默认顺序执行序列化
(2)如果提供了第二个参数,应用这个函数过滤器,传入的函数过滤器的值是第(1)步返回的值。
(3)对第(2)步 返回的每个值进行相应的序列化。
(4)如果提供了第三个参数,执行相应的格式化操作。
解析选项:
JSON.parse()方法也可以接收另一个参数,改参数是一个函数,讲在买个键值对上调用,为区别JSON.stringify()方法接收的过滤器(有可能是函数的函数(replace)),在这里的函数叫还原函数(reviver)。接收两个参数,一个键和一个值,并且需要返回一个值。
例如:
var user= {
title: '解忧杂货店',
author: '东野圭吾',
edition: 10,
date: '2012-03',
releaseDate: new Date(2017,11,28)
};
var jsonText1 =JSON.parse(jsonText0,function(key,value){
if(key == "releaseDate"){
return new Date(value)
}else{
return value
}
});
console.log(jsonText1.releaseDate)
控制台返回的结果:

简单来说就这样我们就解析后的内容中获取需要的年月日等内容。
JSON--stringify() 和 parse() 方法的更多相关文章
- JOSN的stringify()和parse()方法
JOSN的stringify()和parse()方法使用,stringify()把对象序列化,parse()把JSON字符串解析为js对象 <script> var book = { ti ...
- JSON的stringify和parse方法
一.JSON.parse() 方法用于将一个 JSON 字符串转换为对象. 以下代码为将字符串解析为对象,然后再赋值给对象 //页面初始化完成加载,option是传递的参数 onLoad: funct ...
- JSON对象的stringify()和parse()方法
1.stringify() ---- JavaScript对象序列化为JSON字符串 eg1. var book = {title: 'JS', authors: ['Van'], edition:3 ...
- JSON.stringify的使用方法
语法: JSON.stringify(value [, replacer] [, space]) value:是必须要的字段.就是你输入的对象,比如数组啊,类啊等等. replacer:这个是可选的. ...
- JSON stringify and parse
来源 : http://javascript.ruanyifeng.com/stdlib/date.html //解析json也可以传入一个方法, 基本上和stringify差不多,不过是逆序的, 要 ...
- JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和parse()方法. JSON.stringify(obj)将JSO ...
- 小tips:JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和parse()方法. JSON.stringify(obj)将JSO ...
- JSON对象和字符串之间的相互转换 – JSON.parse() 和 JSON.stringify()
所有现代浏览器都支持 JSON 对象,有两个非常有用的方法来处理 JSON 格式的内容: JSON.parse(string) :接受一个 JSON 字符串并将其转换成一个 JavaScript 对象 ...
- JSON.stringify和JSON.parse的用法
用法概述 所有的现代浏览器都支持 JSON 对象,有两个非常有用的方法来处理 JSON 格式的内容: JSON.parse(string) 接受一个 JSON 字符串并将其转换成一个 JavaScri ...
- JSON.parse 和 JSON.stringify 详解
JSON格式,(简写JavaScript Object Notation),是一种用于数据交换的文本格式,书写简单. 基于JavaScript原生语法,能够序列化对象.数组.数值.字符串.布尔值和 n ...
随机推荐
- [转]Oracle 创建 DBLink 的方法
http://blog.csdn.net/davidhsing/article/details/6408770 1.如果需要创建全局 DBLink,则需要先确定用户有创建 dblink 的权限: 如果 ...
- Winform界面中实现菜单列表的动态个性化配置管理
在我们一般的应用系统里面,由于系统是面向不同类型的用户,我们所看到的菜单会越来越多,多一点的甚至上百个,但是我们实际工作接触的菜单可能就是那么几个,那么对于这种庞大的菜单体系,寻找起来非常不便.因此对 ...
- [转]结合HierarchyViewer和APK文件反编译获得APP元素id值
背景: 最近在使用Robotium进行Android自动化测试.遇到了一个问题:我需要获得一个View的id(int型数值).此前我在http://maider.blog.sohu.com/25544 ...
- spring aop使用
最近做一个数据库分离的功能,其中用到了spring aop,主要思路就是在service层的方法执行前根据注解(当然也可以根据方法名称,如果方法名称写的比较统一的话)来判断具体使用哪个库.所以想着再回 ...
- js中变量的作用域、变量提升、链式作用域结构
一:作用域 在ES6之前,javascript没有块级作用域(一对{}即为一个块级作用域),只有全局作用域和函数作用域(局部),因此,对应的有全局变量和局部变量.在函数内部可以访问到全局变量,但在函数 ...
- java中a=a+1和a+=1的区别
我们先看一段代码: 1 byte b=2; b=b+1; System.out.println(b); 运行结果: 错误: 不兼容的类型: 从int转换到byte可能会有损失 ...
- androidStudio 中 gradle 常用功能
1. gradle 使用 svn 当前版本信息. def getSvnRevision() { new ByteArrayOutputStream().withStream { os -> de ...
- CCLuaObjcBridge - Lua 与 Objective-C 互操作的简单解决方案
http://dualface.github.io/blog/2013/01/27/call-objectivec-from-lua/ 月初的时候,发了一篇关于 Lua 与 Java 互操作的文章,里 ...
- Http简单思维导图
- 离开Visual Studio C#的编译(你不知道的C#)
很多人一开始学习.net 第一天必定是安装Visual studio 或者很多关于C#学习的书上第一章节必定是告诉你要你下载一个vs 其实没有vs未必就不能开发了,只是可能说vs给我的开发带来了很多的 ...