序列化:stringify()
将JavaScript对象序列号为JSON字符串
反序列化:parse()
将JSON字符串解析为原生JavaScript值

序列化选项:
JSON.stringify()除了可以序列化JavaScript对象外,还可以接收另外两个参数,这两个参数用于指定以不同的方式序列化JavaScript对象,第一个参数是过滤器,第二个参数是选项,表示是否在 json字符串中保留缩进

  1. 过滤器:可以是一个数组也可以是一个函数

    例如: 
    一个数组:

     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)

    控制台返回的数据如下:

  2. 字符串缩进

    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个字符

  3. 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)

    控制台返回的结果:

  4. 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)

控制台返回的结果:

简单来说就这样我们就解析后的内容中获取需要的年月日等内容。

最新文章

  1. 67. 总结篇:面试中随机数"等概率"vs"不等概率"生成问题[random generator with equal or unequal probability]
  2. Linux 系统 网络配置
  3. python中关于正则表达式三
  4. 服务器返回的JSON字符串
  5. pyqt一个小例子
  6. HDU1203_I NEED A OFFER!【01背包】
  7. Web前端常用快捷键总结(OS X系统)
  8. iic接口介绍
  9. C++STL模板库序列容器之deque
  10. thinkphp3.2.3集成腾讯云短信文档流程
  11. iPhone X手机投屏电脑无线连接教程
  12. php正则替换函数-----preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
  13. 自学Linux Shell4.3-处理数据文件sort grep gzip tar
  14. linux 系统文件类型、系统安装时间、系统启动时间、系统运行时间、设置及显示时间、系统时间和硬件时间
  15. C#导出HTML到PDF组件Pechkin
  16. thinkphp 使用原生mysql语句 联合查询
  17. 「小程序JAVA实战」小程序导航组件(26)
  18. POJ 2104 K-th Number(划分树)
  19. Oracle10g RAC 关闭及启动
  20. brew和brew cask安装

热门文章

  1. flutter中的网络请求和下拉刷新上拉加载,toast的案例
  2. weui 可移动悬浮按钮
  3. osg include lib -computer1
  4. declaration of 'int ret' shadows a parameter
  5. 软件定义网络基础---OF-Config协议
  6. 深入理解ElasticSearch(PDF版 内含目录)
  7. 正则表达式\s空格,\d数字,量词+*?测试
  8. windows下 使用ip地址反查主机名的命令
  9. linux 大量time_wait的解决方法
  10. Flutter Bloc状态管理 简单上手