在前端做图表展示时,往往会遇到后台传来的一大串数据,一般要转成数组形式,在前端展示,特别是百度的Echarts!这里使用eval解决此问题。
对于服务器返回的JSON字符串,如果POST请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于eval()中执行一次。这种方式也适合以普通javascipt方式获取json对象,以下举例说明:
var dataObj=eval("("+data+")");//转换为json对象</span>
在 eval这里要添加 “("("+data+")");的原因是 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
不废话了,写个具体demo如下
代码主要由实体类TestBean、SpringMvc控制类Test、前端jsp文件
前端jsp
function test(){
var a="names";
var b="ids";
$.post(path + "/Test/",{
a:a,
b:b
},function(data,status){
alert(data);
var json = eval("("+data+")");
alert();
alert();
/* $.each(json,function(i,n){
alert(json[i].name+" "+json[i].value);
alert(+" "+);
}); */
});
}
控制类
@Controller
@RequestMapping("/Test")
public class Test {
@RequestMapping("/")
public void test(String a,String b,HttpServletResponse response) throws IOException {
Logi.logWarn("test", a+b);
TestBean testBean = new TestBean();
for(int i = 0;i<20;i++)
testBean.ids.add("id"+i);
for(int i = 0;i<20;i++)
testBean.names.add("name"+i);
JSONObject jsonObject = (testBean);
("test",jsonObject.toString());
response.getWriter().write(jsonObject.toString());
return ;
}
}
实体类
public class TestBean {
public ArrayList<String> names = new ArrayList<String>();
public ArrayList<String> ids = new ArrayList<String>();
public ArrayList<String> getNames() {
return names;
}
public void setNames(ArrayList<String> names) {
this.names = names;
}
public ArrayList<String> getIds() {
return ids;
}
public void setIds(ArrayList<String> ids) {
this.ids = ids;
}
@Override
public String toString() {
return "TestBean [names=" + names + ", ids=" + ids + "]";
}
}