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对象,获取其对应键值 可 ...
随机推荐
- Spring的Bean的生命周期方法执行顺序测试
通过一个简单的Maven工程来演示Spring的Bean生命周期函数的执行顺序. 下面是工程的目录结构: 直接贴代码: pom.xml文件内容: <?xml version="1.0& ...
- shell编程系列20--文本处理三剑客之awk常用选项
shell编程系列20--文本处理三剑客之awk常用选项 awk选项总结 选项 解释 -v 参数传递 -f 指定脚本文件 -F 指定分隔符 -V 查看awk的版本号 [root@localhost s ...
- OpenBLAS编译 Debug x64 Win10 vs2015
OpenBLAS编译 Debug x64 Win10 vs2015 >------ 已启动生成: 项目: ZERO_CHECK, 配置: Debug x64 ------ > Che ...
- osg编译日志-release
1>------ 已启动生成: 项目: ZERO_CHECK, 配置: Release x64 ------1> Checking Build System1> CMake does ...
- Qt编写气体安全管理系统15-网络转发
一.前言 在本系统中网络转发是个什么功能含义呢,其实就是将本地采集设备的所有数据打包发送到指定的网络地址,默认采用UDP的形式,无连接开销小,我也是看到很多的组态软件有这个功能,其实现有的很多的气体探 ...
- 123457123456#0#-----com.tym.NaojingJiZhuanWan--前拼后广--脑筋急转弯
com.tym.NaojingJiZhuanWan--前拼后广--脑筋急转弯
- docker build doris-0.11.20-release source code
1. pull doris dev docker image sudo docker pull apachedoris/doris-dev:build-env-1.1 2. dowload doris ...
- Vue cli4.0 代理配置
proxy: { '/service': { target: 'http://192.168.40.243:3000/', //对应自己的接口 changeOrigin: true, ws: true ...
- 【Leetcode_easy】993. Cousins in Binary Tree
problem 993. Cousins in Binary Tree 参考 1. Leetcode_easy_993. Cousins in Binary Tree; 完
- docker中的fastdfs
准备环节)(本文遗漏当初出现的一个问题由于是docker装的fastdfs所以tracker storage client,nginx,nginx module都在同一个容器中只需要修改配置 特别注意 ...