JSON--stringify() 和 JSON--parse() 方法

序列化:stringify()
將JavaScript對象序列號爲JSON字符串
反序列化:parse()
將JSON字符串解析爲原生JavaScript值json

序列化選項:
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);
    複製代碼


    控制檯返回的數據以下:this


    一個函數:spa

    複製代碼
     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)
    複製代碼

    控制檯返回的數據以下:


    code

  2. 字符串縮進

    JSON.stringify()方法的第三個參數用於控制結果中的縮進和空白符對象

    例如:blog

    複製代碼
     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)
    複製代碼

    控制檯返回的結果:ip

    由上面能夠看出縮進與不縮進的結果,相對來講縮進的可讀性強;
    注意:縮進的值範圍在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)
複製代碼

控制檯返回的結果:

簡單來講就這樣咱們就解析後的內容中獲取須要的年月日等內容。

相關文章
相關標籤/搜索