JSON--stringify() 和 JSON--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)
复制代码

控制台返回的结果:

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

posted @ 2019-01-07 11:11  huanghuamei206023  阅读(202)  评论(0编辑  收藏  举报