JSON--stringify() 和 JSON--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)

控制台返回的结果:

简单来说就这样我们就解析后的内容中获取需要的年月日等内容。
JSON--stringify() 和 JSON--parse() 方法的更多相关文章
- JSON.stringify()和JOSN.parse()
JSON.stringify()跟JSON.parse() 终于把这两个方法搞清楚了!!! JSON.tringify():把一个json数据转化成JSON string JSON.stringify ...
- json.stringify()的妙用,json.stringify()与json.parse()的区别
一.JSON.stringify()与JSON.parse()的区别 最近做项目,发现JSON.stringify()使用场景真的挺多,我们都知道JSON.stringify()的作用是将 JavaS ...
- ZH奶酪:JavaScript中的JSON.stringify() and JSON.parse()
JSON.stringify() JSON.stringify()可以将任意的JavaScript值序列化成JSON字符串. 语法 JSON.stringify(value[, replacer [, ...
- 关于JSON.stringify()与JSON.parse()
一.JSON.stringify()与JSON.parse()的区别 JSON.stringify()的作用是将js值转换成JSON字符串,而JSON.parse()是将JSON字符串转换成一个对象. ...
- JSON 解析器。JSON.stringify和JSON.parse
以前用的是JavaScript 的eval. 现在JSON 提供了JSON.stringify和JSON.parse两个函数. JSON.parse用于从一个字符串中解析出json对象. JSON. ...
- JSON.parse()与JSON.stringify()和eval()使用方法详解
在和后端对接口的时候,遇到了一个问题 就是series里面数据变量进行拼接的时候,data数据里面全部是数值int类型的 但是因为某些需求需要让他进行某个数据之前的数据都为空 我试过用空字符串和und ...
- JSON.stringify()、JSON.parse()和eval(string)
1.JSON.stringify()用于从一个对象解析出字符串,eg: var obj = {"name":"奔跑的蜗牛","age":&q ...
- Js中JSON.stringify()与JSON.parse()与eval()详解及使用案例
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使使JSON称为理想的数据交换语 ...
- 你不知道的JSON.stringify和JSON.parse
json是JavaScript 对象表示法(JavaScript Object Notation),是一种简单的数据格式,类似于XML,其格式为名称/值对,数据用逗号隔开,名称必须用双引号括起来.例如 ...
- js对json解析获取对应属性的值,JSON.stringify()和JSON.parse()
JSON.stringify() 该方法,将一个JSON对象转化为字符串string JSON.parse() 该方法,将一个字符串转化为JSON对象object 对于JSON对象,获取其对应键值 可 ...
随机推荐
- 123457123457#0#-----com.tym.YuErBaiKeTYM--前拼后广--育儿百科
com.tym.YuErBaiKeTYM--前拼后广--育儿百科
- Spring MVC初始化
整个Spring MVC的初始化,配置了DispatcherServlet和ContextLoaderListener,那么它们是如何初始化Spring IoC容器上下文和映射请求上下文的呢?所以 ...
- 【翻译】Flink window
本文翻译自flink官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/stream/operators/window ...
- Andrew Ng机器学习课程10
Andrew Ng机器学习课程10 a example 如果hypothesis set中的hypothesis是由d个real number决定的,那么用64位的计算机数据表示的话,那么模型的个数一 ...
- ATT&CK框架学习
ATT&CK模型 ATT&CK是分析攻击者行为(即TTPs)的威胁分析框架.ATT&CK框架核心就是以矩阵形式展现的TTPs,即Tactics, Techniques and ...
- 【转】那些年用过的Redis集群架构(含面试解析)
引言 今天是2019年2月12号,也就是大年初八,我接到了高中同学刘有码面试失利的消息. 他面试的时候,身份是某知名公司的小码农一枚,却因为不懂自己生产上Redis是如何部署的,导致面试失败! 人间惨 ...
- [转帖]进程上下文频繁切换导致load average过高
进程上下文频繁切换导致load average过高 2016年6月26日admin发表评论阅读评论 http://www.361way.com/linux-context-switch/5131.ht ...
- java当中JDBC当中请给出一个Oracle DataSource and SingleTon例子
[学习笔记] 6.Oracle DataSource and SingleTon: import oracle.jdbc.pool.OracleDataSource;import java.sql.C ...
- hashCode和identifyHashCode的区别
API: System类提供一个identifyHashCode(Object o)的方法,该方法返回指定对象的精确hashCode值,也是根据该对象的地址计算得到的HashCode值.当某个类的ha ...
- csdn博客整理
@TOC 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown ...