1、相同点
JSON.parse和eval函数都可将一段json字符串转换为json对象,如:
var json = '{"intro":[{"name":"lucy", "sex":"male"},{"name":"polly","sex":"male"}]}'; var res1 = eval('(' + json + ')'); var res2 = JSON.parse(json); console.log(res1.intro[0].name); // lucy console.log(res2.intro[1].sex); // male
2、不同点
JSON.parse将数据转换为 JS 对象时,会检测数据是否是标准的json格式,只解析属性名是双引号包裹的字符串对象,
并会忽略换行和空格,并能捕捉JSON中的语法错误,而eval函数可解析包含js语句的json字符串。JSON.parse的安全性更高。
var json = '{"intro":[{"name":"lucy", "sex":"male"},{"name":"polly","sex":alert("unkown")}]}'; var res1 = eval('(' + json + ')'); console.log(res1.intro[0].name); // lucy
当json字符串中含有js代码时,eval函数可执行其中的js代码,安全性低。
var json = '{"intro":[{"name":"lucy", "sex":"male"},{"name":"polly","sex":alert("unkown")}]}'; var res2 = JSON.parse(json);
// 报错 VM134:1 Uncaught SyntaxError: Unexpected token a in JSON at position 62 at JSON.parse (<anonymous>) console.log(res2.intro[1].sex);
当json字符串中含有js代码时,JSON.parse报错,安全性高。