zoukankan      html  css  js  c++  java
  • JSON--stringify() 和 parse() 方法

    序列化: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)

    控制台返回的结果:

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

  • 相关阅读:
    CodeForces 453A Little Pony and Expected Maximum
    bzoj1415[NOI2005]聪聪和可可-期望的线性性
    记lrd的高二上学期第五次调研考试
    bzoj4443[SCOI2015]小凸玩矩阵
    bzoj1415[NOI2005]聪聪和可可
    bzoj2702[SDOI2012]走迷宫
    connectionstrings-MYSQL
    connectionstrings-oracle
    connectionstrings-sql server 2012
    sqlserver存储过程中SELECT 与 SET 对变量赋值的区别[转]
  • 原文地址:https://www.cnblogs.com/wjf9492/p/8136131.html
Copyright © 2011-2022 走看看