我們將一個字符串解析成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/
