一、 JSON.parse 方法
將json串轉換成object對象,然後能夠用.獲取屬性值。
var b='{"title":"編號管理","parentName":"裝備管理"}';var c=JSON.parse(b);console.log(c);
結果如下圖
你的字符串必須符合JSON格式,即鍵值都必須使用雙引號包裹,單引號不行,例如:
二、 JSON.stringify 方法
基本用法:一個對象通過stringify之後變成字符串
var data =[
{
name: "程才",sex:"0",age:20
},
{
name: "程新松",sex:"1",age:22
},
{
name: "程功",sex:"1",age:18
}
];
console.log(data);
var str_json = JSON.stringify(data);
console.log(str_json,'字符串');
結果如下圖
- 1、方法的定義
- 2、JSON.stringify提供了參數分離出自己需要的那部分數據
- 3、JSON.stringify提供了參數回調函數做一個映射關係
- 4、JSON.stringify提供了參數格式化字符串
1、方法的定義
JSON.stringify ( value [, replacer] [ , space] )
參數:
(1)value:必選,要轉換的值(包括所有的數據類型,通常是對象或者數組)
(2)replace:可選,用於要轉換結果的函數或者數組;如果replace是數組,僅僅是轉換具有該鍵值的成員,成員的轉換順序和鍵在數組中的順序一致;如果replace是函數,會傳入每一個成員的鍵和值,使用的是返回值而不是原始值,如果函數返回的是undefined,則排除該成員。查看了JSON2的源碼,
rx_escapable.lastIndex = 0;
return rx_escapable.test(string)
? "\"" + string.replace(rx_escapable, function (a) {
var c = meta[a];
return typeof c === "string"
? c
: "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
}) + "\""
: "\"" + string + "\"";
}
確認並不會傳入每個成員的鍵和值,而僅僅以空字符串形式調用replacer函數。該函數的實質是自定義的用於轉化爲JSON字符串的函數。
(3)space:可選, 向返回值JSON 文本添加縮進、空格和換行符以使其更易於讀取。
如果省略space,則將生成返回值文本,而沒有任何額外空格。
如果 space是一個數字,則返回值文本在每個級別縮進指定數目的空格。 如果 space 大於 10,則文本縮進 10 個空格。
如果 space是一個非空字符串(例如“\t”),則返回值文本在每個級別中縮進字符串中的字符。
如果 space 是長度大於 10個字符的字符串,則使用前 10 個字符。
2、JSON.stringify提供了分離出自己需要的那部分數據
比如說這個場景,我們的數據非常的複雜,有類似頭像,暱稱,個人簽名等,可是我保存在本地,只需要用戶名,性別,怎麼搞?
方法一:可以用遍歷數組重新提取一下
var data =[
{
name: "程才",sex:"0",age:20
},
{
name: "程新松",sex:"1",age:22
},
{
name: "程功",sex:"1",age:18
}
];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);
VM764:18 [{"name":"程才","sex":"0"},{"name":"程新松","sex":"1"},{"name":"程功","sex":"1"}]
方法二:的確可以這麼幹,但是JSON.stringify提供了參數分離出自己需要的那部分數據
var str_json = JSON.stringify(data,["name","sex"]);
console.log(str_json);
第二個參數只要傳入需要的keys數組,就非常輕鬆的處理這個,結果如下:
3、JSON.stringify提供了回調函數做一個映射關係
比如說,我們把sex裏的1,0修改爲男,女 ,那麼第二個參數可以通過回調函數來處理這個映射關係。
var str_json = JSON.stringify(data,function(key,value){
if(key == 'sex'){
return ["女",'男'][value];
}
return value;
});
console.log(str_json);
第二個參數很厲害,省去了不少的麻煩,結果如圖:
4、JSON.stringify提供了參數格式化字符串
第三個參數,用於格式化字符串
var str_json = JSON.stringify(data,null,'\t');
console.log(str_json);
var str_json = JSON.stringify(data,['name','sex'],'\t');
console.log(str_json);
5、JSON.stringify的妙用-判斷數組中是否包含某對象,或判斷對象是否相等
let data = [
{name:'echo'},
{name:'聽風是風'},
{name:'天子笑'},
],
val = {name:'天子笑'};
JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1;//true
val1 = {name:'天笑'};
JSON.stringify(data).indexOf(JSON.stringify(val1)) !== -1;//false
let i = [1,2,3],
b = [1,2,3];
JSON.stringify(i) === JSON.stringify(b);//true