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)

控制台返回的結果:

簡單來說就這樣我們就解析后的內容中獲取需要的年月日等內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM