序列化:stringify()
將JavaScript對象序列號為JSON字符串
反序列化:parse()
將JSON字符串解析為原生JavaScript值
序列化選項:
JSON.stringify()除了可以序列化JavaScript對象外,還可以接收另外兩個參數,這兩個參數用於指定以不同的方式序列化JavaScript對象,第一個參數是過濾器,第二個參數是選項,表示是否在 json字符串中保留縮進
- 過濾器:可以是一個數組也可以是一個函數
例如:
一個數組: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)
控制台返回的數據如下:

- 字符串縮進
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個字符
- 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)
控制台返回的結果:
-
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)
控制台返回的結果:

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