用過 json 的應該都知道,把一個對象通過 stringify 之后提交給后台或者存儲在 Storage 里是很常用的手段。
但是 IE6-7 下沒有 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);
其實,我覺得這是個非常雞肋的功能,,一般情況下卻是沒啥用。
好了,今天的分享就這些了,希望對新手朋友有所幫助。
參考資料:
JSON.stringify() - JavaScript | MDN
JSON in JavaScript