關于JSON.stringify函數(shù),應該都知道其最初的含義,JSON.stringify(obj)把對象轉化為JSON字符串,當然,在低版本瀏覽器中需要引入JSON2.js插件才能正常使用。但是,JSON.stringify僅僅就這一個用處么?顯然不止。它還有第二個、第三個參數(shù)。了解這三個用處將對學習JSON 大有用處。
JSON.stringify的第二個參數(shù)可以是一個數(shù)組,也可以是一個function。
對象或者說JSON字符串都可以看成是由多個key-value鍵值對組成,而第二個參數(shù)為數(shù)組的時候過濾掉所有key不在數(shù)組中的鍵值對。例如:
可以看到,鍵名不為a或者b的全部被過濾掉了。OK,例子看懂了,那這特性有什么用呢?
經(jīng)常我們會有這種需求,對于下面數(shù)組,不顯示其年齡(age)屬性。
一般或許會采用循環(huán)排出,或者數(shù)組的map等遍歷從新生成,但是有JSON.stringify就簡單多了。先轉成JSON字符串同時過濾掉age,再還原成數(shù)組對象。
OK,簡簡單單一句話,搞定。
當然,第二個參數(shù)也可以是一個Function,其有兩個參數(shù),當前遍歷的key和value,如果沒有返回值則過濾掉當前key值①,否則當前遍歷的key值對應的value值為返回值②。
如上屏蔽age一例,如果用function的方式則可以這樣寫:
可以看到結果和上面一樣,當然,這里只是JSON字符串,需要再次parse轉化為對象形式。當然這里只用到function的第①點,還有另一個作用,改變其value值。如上同一個users對象,我們需要把sex的0和1分別改變成男和女。
第三個參數(shù)主要作為一個格式化參數(shù)。如下對象:
假如我們用alert調(diào)試,會發(fā)現(xiàn)alert(test);為一個'[object Object]’根本看不到值。但是我們用alert(JSON.stringify(test));,可以看到其值但是完全沒有格式,第三個參數(shù)就是這里的格式化補齊的符號。
如果是數(shù)字則表示縮進量:
如果是字符則表示填充字符,當然同樣會以第一層 1個,第二層2個。。。依次填充:
可以看到,第二層的對象是填充的兩個*,So,我們同樣可以通過填充\t來進行代碼縮進,當然,數(shù)字寫上去速度快多了。
原文來自:代碼山