我们很多时候都会使用ajax技术从后端和获取想要的数据去渲染页面,而我们解析从后台传来的json对象有两种方法:eval(),JSON.parse()
假设我们现在有一个json格式的字符串:
{
"people" : [
{"name":"张三","age":11},
{"name":"李四","age":11},
{"name":"王五","age":11}
]
}
接下来,我们用这两种方法将它解析成json对象:
第一种方式:eval();
var data='{"student":[{"name":"张三","age":"11"},{"name":"李四","age":"11"},{"name":"王五","age":"11"}]}’;
eval(’(“+data+”)’);
第二种方式:JSON.parse();
var data='{"student":[{"name":"张三","age":"11"},{"name":"李四","age":"11"},{"name":"王五","age":"11"}]}’;
JSON.parse(data);
区别:eval方法不会去检查给的字符串时候符合json的格式~同时如果给的字符串中存在js代码eval也会一并执行~比如:
var data='{"student":[{"name":"张三","age":"11"},{"name":"李四","age":"alert(11)"},{"name":"王五","age":"11"}]}’;
此时执行eval方法后会先弹出一个提示框输出11的字符串;
这时候使用JSON.parse()就会报错,显示错误信息为当前字符串不符合json格式;即JSON.parse()方法会检查需要转换的字符串是否符合json格式.
相比而言eval方法是很不安全,特别是当涉及到第三方时我们需要确保传给eval的参数是我们可以控制的,不然里面插入比如window.location~指向一个恶意的连接
总的来说,还是推荐使用JSON.parse来实现json格式字符串的解析。