原文 感謝
用過 json 的應該都知道,把一個對象通過 stringify 之後提交給後臺或者存儲在
Storage
裏是很常用的手段。但是 IE6-8 下沒有 JSON 對象,所以要藉助 json2.js 來實現。
今天我們來簡單介紹下
stringify
方法的一些正確使用姿勢吧。當然,讓高手們賤笑了,本文只是分享一些方法給新手朋友們。
var data = [ {name: "王尼瑪", sex:1, age: 30}, {name: "王尼美", sex:0, age: 20}, {name: "王大錘", sex:1, age: 30} ]; var str_json = JSON.stringify(data); console.log(str_json);
這個是我們日常用法,非常簡單,對吧。
比如說,我們的數據非常複雜,還有類似頭像,暱稱,個人簽名之類的信息。
可是我保存在本地,只需要用戶名,和性別,腫麼破呢?
也許你會說 so easy, 遍歷數據重新提取下即可。
例如:
var data = [ {name: "王尼瑪", sex:1, age: 30}, {name: "王尼美", sex:0, age: 20}, {name: "王大錘", sex:1, age: 30} ]; for (var i=0, new_data=[]; i<data.length; i++) { new_data.push({ name: data[i].name, sex: data[i].sex }); } var str_json = JSON.stringify(new_data); console.log(str_json);
確實分分鐘搞定。
其實我們只需要用 stringify 第二個參數即可簡單處理這種問題。
var data = [ {name: "王尼瑪", sex:1, age: 30}, {name: "王尼美", sex:0, age: 20}, {name: "王大錘", sex:1, age: 30} ]; var str_json = JSON.stringify(data, ["name", "sex"]); console.log(str_json);
第二個參數只要傳入需要的keys數組,就非常輕鬆的就完成這種處理了。
當然如果我們要更糾結的處理,比如要把 1,0 修改爲男女,那麼第二個參數可以用回調函數來處理。
var data = [
{name: "王尼瑪", sex:1, age: 30},
{name: "王尼美", sex:0, age: 20},
{name: "王大錘", sex:1, age: 30}
];
var str_json = JSON.stringify(data, function (k, v) {
if (k === "sex") {
return ["女", "男"][v];
}
return v;
});
console.log(str_json);
第二個參數如此強悍,爲我們省去了不少麻煩。
還有第三個參數,用於格式化字符串用的。
var data = [ {name: "王尼瑪", sex:1, age: 30}, {name: "王尼美", sex:0, age: 20}, {name: "王大錘", sex:1, age: 30} ]; var str_json = JSON.stringify(data, null, "\t"); console.log(str_json); str_json = JSON.stringify(data, ["name", "sex"], "\t"); console.log(str_json);
其實,我覺得這是個非常雞肋的功能,,一般情況下卻是沒啥用。
好了,今天的分享就這些了,希望對新手朋友有所幫助。