Ajax中解析Json的兩種方法對(duì)比分析
eval(); //此方法不推薦
JSON.parse(); //推薦方法
一、兩種方法的區(qū)別
我們先初始化一個(gè)json格式的對(duì)象:
var jsonDate = '{ "name":"周星馳","age":23 }'
var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法
var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法
然后在控制臺(tái)調(diào)用:
console.log( jsonObj.name ); // 兩種方法都可以正確輸入 周星馳
那么問(wèn)題來(lái)了 兩種方法有什么區(qū)別呢?(下面我們稍微把代碼改動(dòng)一下,藍(lán)色字體為修改部分)
var jsonDate = '{ "name":alert("hello"),"age":23 }'
var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法
console.log( jsonObj.age ); //會(huì)先執(zhí)行“alert”輸出“hello” 然后才輸出 23
換“JSON.parse();”方法:
var jsonDate = '{ "name":alert("hello"),"age":23 }'
var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法
cosole.log( jsonobj.age ) // 報(bào)錯(cuò) 這個(gè)錯(cuò)誤告訴我們這個(gè)字符串是不合法的
小結(jié):“eval();”方法解析的時(shí)候不會(huì)去判斷字符串是否合法,而且json對(duì)象中的js方法也會(huì)被執(zhí)行,這是非常危險(xiǎn)的;而“JSON.parse();”方法的優(yōu)點(diǎn)就不用多說(shuō)了,推薦此方法。(不明白的盆友可以自己在控制臺(tái)測(cè)試一下)
二、擴(kuò)展問(wèn)題
var jsonDate = '{ "name":"周星馳","age":23 }'
大家可以看到在上面測(cè)試時(shí)一直用紅色把包在花括號(hào)外面的引號(hào)標(biāo)注了起來(lái),這對(duì)引號(hào)是很關(guān)鍵卻又是常常被忽略的,因?yàn)?“eval();” 和 “JSON.parser();” 這兩個(gè)方法的參數(shù)只接受字符串,也就是說(shuō)只能解析字符串!!
那我不經(jīng)會(huì)有一個(gè)思考,我們?cè)诔跏蓟臅r(shí)候若不加引號(hào)對(duì),那么它本身就是對(duì)象,js可以直接獲取對(duì)象本身的屬性和方法;為什么還要加引號(hào)將它變成字符串之后再用 “eval();” 或者 “JSON.parse();” 解析,這樣做不是既不環(huán)保又沒(méi)有效率嗎?
原因很簡(jiǎn)單:前端提供給后臺(tái)的只能是字符串?dāng)?shù)據(jù)格式,后臺(tái)返回給前臺(tái)的就看返回的是什么數(shù)據(jù)格式,是字符串就必須解析之后再用。
(這個(gè)小問(wèn)題一般大家都會(huì)忽略掉,不太關(guān)注。我之所以好奇的原因也是因?yàn)閷?duì)后臺(tái)了解的不夠,把這個(gè)問(wèn)題拋出來(lái)希望對(duì)后臺(tái)不熟的朋友有所幫助,知道是怎么回事后自然而然會(huì)加深記憶,在開(kāi)發(fā)過(guò)程中就不會(huì)漏掉了)
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
- Jquery ajax不能解析json對(duì)象,報(bào)Invalid JSON錯(cuò)誤的原因和解決方法
- 淺析ajax請(qǐng)求json數(shù)據(jù)并用js解析(示例分析)
- php+mysql結(jié)合Ajax實(shí)現(xiàn)點(diǎn)贊功能完整實(shí)例
- PHP+jQuery+Ajax實(shí)現(xiàn)多圖片上傳效果
- php+ajax+jquery實(shí)現(xiàn)點(diǎn)擊加載更多內(nèi)容
- jQuery+AJAX實(shí)現(xiàn)無(wú)刷新下拉加載更多
- jQuery+Ajax+PHP+Mysql實(shí)現(xiàn)分頁(yè)顯示數(shù)據(jù)實(shí)例講解
- jquery與php結(jié)合實(shí)現(xiàn)AJAX長(zhǎng)輪詢(LongPoll)
- jQuery+AJAX實(shí)現(xiàn)遮罩層登錄驗(yàn)證界面(附源碼)
- 比較Ajax的三種實(shí)現(xiàn)及JSON解析
相關(guān)文章
JS中JSON.parse(JSON.stringify())實(shí)現(xiàn)深拷貝
深拷貝就是完全拷貝一份新的對(duì)象,本文主要介紹了JS中JSON.parse(JSON.stringify())實(shí)現(xiàn)深拷貝,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
淺談JsonObject中的key-value數(shù)據(jù)解析排序問(wèn)題
下面小編就為大家分享一篇淺談JsonObject中的key-value數(shù)據(jù)解析排序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
把普通對(duì)象轉(zhuǎn)換成json格式的對(duì)象的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇把普通對(duì)象轉(zhuǎn)換成json格式的對(duì)象的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07
javascript表單域與json數(shù)據(jù)間的交互
找了幾個(gè)javascript的框架,都沒(méi)有找到我想要的: 提供函數(shù),把某個(gè)表單的所有域封裝成json數(shù)據(jù)格式的對(duì)象,唯有自己實(shí)現(xiàn)一個(gè)。2008-10-10
JSON與XML優(yōu)缺點(diǎn)對(duì)比分析
本文從各個(gè)方面向大家對(duì)比展示了json和xml的優(yōu)缺點(diǎn),十分的全面細(xì)致,有需要的小伙伴可以參考下。2015-07-07
實(shí)現(xiàn)單層json按照key字母順序排序的示例
下面小編就為大家分享一篇實(shí)現(xiàn)單層json按照key字母順序排序的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
寫給小白學(xué)習(xí)的地理信息的表示法GeoJSON
這篇文章主要為大家介紹了寫給小白學(xué)習(xí)的地理信息的表示法GeoJSON的詳細(xì)實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
一篇了解JSON與數(shù)據(jù)存儲(chǔ)基礎(chǔ)知識(shí)
這篇文章主要介紹了JSON與數(shù)據(jù)存儲(chǔ)基礎(chǔ)知識(shí),本篇文章較為基礎(chǔ),但非常詳細(xì),可以很好的理解JSON和數(shù)據(jù)存儲(chǔ),,需要的朋友可以參考下2023-01-01
javascript操作JSON的要領(lǐng)總結(jié)
JSON是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON數(shù)據(jù)不須要任何特殊的 API 或工具包,需要的朋友可以了解下2012-12-12

