首先,一句話概括重點: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);
再來看一下直接alert(before)的結果:
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得到的結果為:
看一下alert(before)的結果:
注意: 當一個鍵值對通過方法傳回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對象的屬性按需要進行篩選、排序後輸出。
value為數組,且replacer也為數組的情況: replacer數組将被忽略,和隻有一個value參數的情況一樣。
總結: value為數組形式時,replacer用方法對數組項進行加工。 value為對象形式時,replacer用數組進行篩選與排序。
space: 即每個屬性的分隔符。 省略的話則結果直接按一行輸出: 栗子:
var before = {"name": "bunny", "age": 18, "boyfriend": "bunnylover"};
var after = JSON.stringify(before);
alert(after);
數字的情況,數字代表空格數,最大為10,大于10也隻顯示10個空格: 栗子:
var before = {"name": "bunny", "age": 18, "boyfriend": "bunnylover"};
var after = JSON.stringify(before,["age","name","boyfriend"],12);
alert(after);
轉義字元的情況:例如制表符\t,回車\r等。 栗子:
var before = {"name": "bunny", "age": 18, "boyfriend": "bunnylover"};
var after = JSON.stringify(before,["age","name","boyfriend"],"\t");
alert(after);
字元串的情況:很簡單,自然是在每一個屬性前加上字元串。 栗子:
var before = {"name": "bunny", "age": 18, "boyfriend": "bunnylover"};
var after = JSON.stringify(before,["age","name","boyfriend"],"qwer");
alert(after);