天天看點

JSON.stringify()詳解

首先,一句話概括重點:JSON.stringify()就是将js對象轉換為JSON字元串。 文法:JSON.stringify(value[, replacer[, space]]); 參數說明:      value:           必須字段,一個有效的JSON字元串,可以是對象、數組等。      舉個栗子:

var before = {"name": "bunny", "age": 18, "boyfriend": "bunnylover"};
var after = JSON.stringify(before);
alert(after);
           
JSON.stringify()詳解

     再來看一下直接alert(before)的結果:        

JSON.stringify()詳解

     replacer:           可選字段,用于轉換第一個參數(即目标JSON字元串)的函數或數組。這個參數用法有點多

          value為數組,且replacer為方法的情況:                這個方法将被調用,傳入的參數是JSON字元串的鍵和值,最後使用的是這個方法的傳回值而不再是原始的鍵和值。形象來說這就是加工廠,把目标JSON字元串扔進來對每個鍵值對進行處理,使用處理之後的結果。                舉個栗子:(當然,這裡的匿名function可以提出來寫為獨立方法)

var before = ["I","love","bunny"];
var after = JSON.stringify(before, function(key, value) {
   return value.toString().toUpperCase();
});
alert(after);
           

               那麼最後alert得到的結果為:                     

JSON.stringify()詳解

               看一下alert(before)的結果:                     

JSON.stringify()詳解

               注意:                當一個鍵值對通過方法傳回undefined時,排除此鍵值對,不顯示出來。                根對象的鍵是一個空字元串:""。即return key.toString(); 得到""。

            value為對象,且replacer為數組的情況:                JSON字元串中的鍵将與replacer數組中的值進行比對,将存在于replacer數組中的鍵值保留,并按照replacer數組中的順序排列。也可以了解為将兩者進行比對,遇到能比對的項,則用replacer數組中的值作為鍵,value中的值作為值,組成新的鍵值對,得到新的對象。             可能不太好了解,直接上栗子:

var before = {"name": "bunny", "age": 18, "boyfriend": "bunnylover"};
var after = JSON.stringify(before, ["age","name","pet"]);
alert(after);
           

               得到結果為:                     

JSON.stringify()詳解

               這樣就很明了了,我們可以用它來對JSON對象的屬性按需要進行篩選、排序後輸出。

            value為數組,且replacer也為數組的情況:                replacer數組将被忽略,和隻有一個value參數的情況一樣。

          總結:           value為數組形式時,replacer用方法對數組項進行加工。           value為對象形式時,replacer用數組進行篩選與排序。

     space:           即每個屬性的分隔符。           省略的話則結果直接按一行輸出:           栗子:

var before = {"name": "bunny", "age": 18, "boyfriend": "bunnylover"};
var after = JSON.stringify(before);
alert(after);
           
JSON.stringify()詳解

          數字的情況,數字代表空格數,最大為10,大于10也隻顯示10個空格:           栗子:

var before = {"name": "bunny", "age": 18, "boyfriend": "bunnylover"};
var after = JSON.stringify(before,["age","name","boyfriend"],12);
alert(after);
           
JSON.stringify()詳解

          轉義字元的情況:例如制表符\t,回車\r等。           栗子:

var before = {"name": "bunny", "age": 18, "boyfriend": "bunnylover"};
var after = JSON.stringify(before,["age","name","boyfriend"],"\t");
alert(after);
           
JSON.stringify()詳解

          字元串的情況:很簡單,自然是在每一個屬性前加上字元串。           栗子:

var before = {"name": "bunny", "age": 18, "boyfriend": "bunnylover"};
var after = JSON.stringify(before,["age","name","boyfriend"],"qwer");
alert(after);
           
JSON.stringify()詳解

繼續閱讀