(1)注意:實際上,第一次調用的函數過濾器,傳入的鍵是一個空字符串,而值就是js對象json
以下面一段代碼函數
var obj = { name: "過青年", age: 20, arr: [1,2,3,4], location: "江西宜春", school: { location: "江西南昌" } };
根據上面這個js對象,執行下面的代碼,JSON.stringify()
方法執行後,首先傳入的鍵值對是"":obj
,沒錯,傳入的鍵是一個空字符串,值就是JSON.stringify()
方法的第一個參數對象;而後這個對象進入函數裏面,以下,返回undefined,再拿undefined去調用函數過濾器,返回undefined;code
// 過濾函數 var jsonText = JSON.stringify(obj,function(key,value){ switch (key) { case "name": return "哈哈哈"; default: return undefined; } }); console.log(jsonText); //undefined
思考一下,用函數過濾器怎麼將obj
對象序列化成只有name
一個鍵值對呢?對象
var jsonText = JSON.stringify(obj,function(key,value){ switch (key) { case "": return value; case "name": return "哈哈哈"; default: return undefined; } }); console.log(jsonText); // {"name":"哈哈哈"}
使用JSON.parse()
方法時,第二個參數的還原函數第一次調用時,傳入的鍵是一個空字符串,而值就是json對象字符串
(2)要序列化的對象中的每個對象都要通過過濾器string
var obj = { name: "過青年", age: 20, arr: [1,2,3,4], location: "江西宜春", school: { name: "過青年", age: 20, arr: [1,2,3,4], location: "江西南昌" } }; var jsonText = JSON.stringify(obj,function(key,value){ switch (key) { case "name": return "哈哈哈"; case "arr": return [1]; default: return value; } }); /* {"name":"哈哈哈","age":20,"arr":[1],"location":"江西宜春","school":{"name":"哈哈哈","age":20,"arr":[1],"location":"江西南昌"}} */ console.log(jsonText); // {"name":"哈哈哈"}
如上,每個對象都要通過過濾器it