国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JSON在Javascript中的使用(eval和JSON.parse的區別)詳細解析

2019-11-19 15:33:14
字體:
來源:轉載
供稿:網友

 JSON 和XML比較

json的長度和xml比起來更加短小

json讀取速度更快

json可以使用JavaScript的內置方法直接進行解析,轉化成javascript對象,非常方便。

在Javascript使用eval將接送轉化為json對象

var jsonData = '{"persons":{"name":"成龍","age":58},{"name":"吳京","age":33},"name":"甄子丹","age":44}';var jsonObj = eval('('+jsonData+')');//訪問json對象數組的第一個對象的name屬性console.log(jsonObj.persons[0].name);

在Javascript使用JSON.parse將接送轉化為json對象

var jsonData = '{"persons":{"name":"成龍","age":58},{"name":"吳京","age":33},"name":"甄子丹","age":44}';var jsonObj = JSON.parse(jsonData);//訪問json對象數組的第一個對象的name屬性console.log(jsonObj.persons[0].name);

但是eval方法很不安全,例如:

var jsonData = '{"persons":{"name":"成龍","age":window.alert(123)},{"name":"吳京","age":33},"name":"甄子丹","age":44}';var jsonObj = eval('('+jsonData+')');//訪問json對象數組的第一個對象的name屬性console.log(jsonObj.persons[0].name);

將age的值換成了Javascript代碼,依然可以解析,加入有人惡意修改這個代碼,那么就會造成嚴重后果。

但是JSON.parse不同

var jsonData = '{"persons":{"name":"成龍","age":window.alert(123)},{"name":"吳京","age":33},"name":"甄子丹","age":44}';var jsonObj = JSON.parse(jsonData);//訪問json對象數組的第一個對象的name屬性console.log(jsonObj.persons[0].name);

瀏覽器會檢查出json中的不合理的代碼,并報告錯誤

所以推薦使用JSON.parse

PS:下面在單獨介紹下eval()和JSON.parse()的區別

我們將一個字符串解析成json對象時可以使用兩種方法:

假設我們有一個json格式的字符串:

'{ "student" : [  {"name":"鳴人","age":17},   {"name":"小櫻","age":17},  {"name":"佐助","age":17} ]}'

然后我們需要把它解析成json對象

1、eval()代碼如下:

var data = '{"student" : [{"name":"鳴人","age":17}, {"name":"小櫻","age":17},{"name":"佐助","age":17}]}';eval('(' + data + ')');

2、JSON.parse()代碼如下:

var data = '{"student" : [{"name":"鳴人","age":17}, {"name":"小櫻","age":17},{"name":"佐助","age":17}]}';JSON.parse(data);

區別:eval方法不會去檢查給的字符串時候符合json的格式~同時如果給的字符串中存在js代碼eval也會一并執行~比如如果上面的json格式的字符串改為:(注意紅色部分)

var data = '{"student" : [{"name":"鳴人","age":17}, {"name":"小櫻","age":alert("hehe")},{"name":"佐助","age":17}]}';

此時執行eval方法后會先彈出一個提示框輸出hehe的字符串~

但是使用JSON.parse()就會報錯~顯示錯誤信息為當前字符串不符合json格式~即JSON.parse()方法會檢查需要轉換的字符串是否符合json格式~

相比較而言eval方法是很危險的~特別是當涉及到第三方時我們需要確保傳給eval的參數是我們可以控制的~不然里面插入比如window.location~指向一個惡意的連接~那叫叫天啦

從這個層面講~還是推薦使用JSON.parse來實現json格式字符串的解析

考慮到我們在制造json格式的字符串時極易出現錯誤~這里推薦一個json格式字符串的在線校驗工具:http://jsonlint.com/

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泰兴市| 应城市| 安阳市| 精河县| 广河县| 陆丰市| 尉犁县| 瑞安市| 金溪县| 周宁县| 鹿邑县| 临泉县| 闽侯县| 大同市| 沙田区| 浦北县| 南安市| 娱乐| 夹江县| 建湖县| 普定县| 孝义市| 廉江市| 庆阳市| 龙岩市| 蕲春县| 渝中区| 西吉县| 潞城市| 紫云| 石楼县| 精河县| 沐川县| 龙山县| 亳州市| 江孜县| 天长市| 都江堰市| 东明县| 读书| 贺州市|