json.stringify()與json.parse()的區(qū)別以及用處
一、JSON.stringify()和JSON.parse() 區(qū)別
我們都用過JSON.stringify()和JSON.parse() ,從名字上就能知道
JSON.stringify()的作用是將JavaScript對象轉(zhuǎn)換為JSON 字符串
JSON.parse()可以將JSON字符串轉(zhuǎn)為一個(gè)對象。
通俗易懂版:
- JSON.stringify() 將對象a轉(zhuǎn)化成字符串s;
- JSON.parse() 將字符串s轉(zhuǎn)化成對象a;
簡單點(diǎn)說,它們的作用是相對的,我用JSON.stringify()將對象a變成了字符串c,那么我就可以用JSON.parse()將字符串c還原成對象a。
let arr = [1,2,3]; JSON.stringify(arr);//'[1,2,3]' typeof JSON.stringify(arr);//string let string = '[1,2,3]'; console.log(JSON.parse(string))//[1,2,3] console.log(typeof JSON.parse(string))//object
在使用JSON.parse()需要注意一點(diǎn),由于此方法是將JSON字符串轉(zhuǎn)換成對象,所以你的字符串必須符合JSON格式,即鍵值都必須使用雙引號包裹:
let a = '["1","2"]'; let b = "['1','2']"; console.log(JSON.parse(a));// Array [1,2] console.log(JSON.parse(b));// 報(bào)錯
二、JSON.stringify()妙用
1.判斷數(shù)組是否包含某對象,或者判斷對象是否相等。
//判斷數(shù)組是否包含某對象 let data = [ {name:'掘金'}, {name:'css學(xué)習(xí)'}, {name:'js學(xué)習(xí)'}, ], val = {name:'掘金'}; JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1; // true //判斷兩數(shù)組/對象是否相等 let a = [1,2,3], b = [1,2,3]; JSON.stringify(a) === JSON.stringify(b);//true
2.讓localStorage/sessionStorage可以存儲對象。
localStorage/sessionStorage默認(rèn)只能存儲字符串,而實(shí)際開發(fā)中,我們往往需要存儲的數(shù)據(jù)多為對象類型,那么這里我們就可以在存儲時(shí)利用json.stringify()將對象轉(zhuǎn)為字符串,而在取緩存時(shí),只需配合json.parse()轉(zhuǎn)回對象即可。
//存 function setLocalStorage(key,val){ window.localStorage.setItem(key,JSON.stringify(val)); }; //取 function getLocalStorage(key){ let val = JSON.parse(window.localStorage.getItem(key)); window.localStorage.removeItem(key) return val; }; //測試 let data = [ {name:'掘金'}, {name:'css學(xué)習(xí)'}, {name:'js學(xué)習(xí)'}, ]; setLocalStorage('STORAGEDATE',data); let a = getLocalStorage('STORAGEDATE');
3.實(shí)現(xiàn)對象深拷貝
實(shí)際開發(fā)中,如果怕影響原數(shù)據(jù),我們常深拷貝出一份數(shù)據(jù)做任意操作,其實(shí)使用JSON.stringify()與JSON.parse()來實(shí)現(xiàn)深拷貝是很不錯的選擇。
//深拷貝 function deepClone(data) { let _data = JSON.stringify(data), dataClone = JSON.parse(_data); return dataClone; }; //測試 let arr = [1,2,3], _arr = deepClone(arr); arr[0] = 2; console.log(arr,_arr)//[2,2,3] [1,2,3]
到此這篇關(guān)于json.stringify()與json.parse()的區(qū)別以及用處的文章就介紹到這了,更多相關(guān)json.stringify()與json.parse()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JSON.parse()和JSON.stringify()使用介紹
- 關(guān)于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
- 談?wù)凧SON對象和字符串之間的相互轉(zhuǎn)換JSON.stringify(obj)和JSON.parse(string)
- 深入淺析JSON.parse()、JSON.stringify()和eval()的作用詳解
- JS使用JSON.parse(),JSON.stringify()實(shí)現(xiàn)對對象的深拷貝功能分析
- 詳解關(guān)于JSON.parse()和JSON.stringify()的性能小測試
- JSON中key動態(tài)設(shè)置及JSON.parse和JSON.stringify()的區(qū)別
- 淺談JSON.parse()和JSON.stringify()
- JavaScript 中 JSON.parse 函數(shù) 和 JSON.stringify 函數(shù)
- 一文詳解JSON.parse和JSON.stringify的用法
相關(guān)文章
javascript 循環(huán)讀取JSON數(shù)據(jù)的代碼
服務(wù)端向客戶端返回了一串JSON格式的數(shù)據(jù)。在有些時(shí)候,因?yàn)槟承┨厥獾脑蛭覀儾恢涝嫉膋ey值,因此我們此時(shí)無法象正常一樣通過key值,來獲取value值。這時(shí)我們必須循環(huán)讀取JSON對象數(shù)據(jù)。廢話少說,來看例子。2010-07-07Javascript Jquery 遍歷Json的實(shí)現(xiàn)代碼
Javascript Jquery 遍歷Json的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2010-03-03淺談JSON中stringify 函數(shù)、toJosn函數(shù)和parse函數(shù)
這篇文章主要介紹了淺談JSON中stringify 函數(shù)、toJosn函數(shù)和parse函數(shù),需要的朋友可以參考下2015-01-01json-lib出現(xiàn)There is a cycle in the hierarchy解決辦法
如果需要解析的數(shù)據(jù)間存在級聯(lián)關(guān)系,而互相嵌套引用,在hibernate中極容易嵌套而拋出net.sf.json.JSONException: There is a cycle in the hierarchy異常。2010-02-02利用NodeJS的子進(jìn)程(child_process)調(diào)用系統(tǒng)命令的方法分享
child_process即子進(jìn)程可以創(chuàng)建一個(gè)系統(tǒng)子進(jìn)程并執(zhí)行shell命令,在與系統(tǒng)層面的交互上挺有用處2013-06-06