json解析为什么是eval("("+data+")")

参考博客园博客    eval解析JSON的注意点

前台用jquery提交数据,后台从jquery请求中获得参数,然后去查询数据库,把查询结果包装成JSON对象返回,在jquery中解析JSON结果,但解析时有点小疑惑:为什么eval解析时要括号中还有一对带引号的括号呢?

---------------来自博客园博客的解答--------------

为什么要 eval这里要添加 “("("+data+")");//”呢?

原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被

当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式

(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对

象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和

结束记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:

alert(eval("{}"); // return undefined

alert(eval("({})");// return object[Object]

对于这种写法,在JS中,可以到处看到。

如: (function()) {}();  做闭包操作时等。



alert(dataObj.root.length);//输出root的子对象数量

$.each(dataObj.root,fucntion(idx,item){

if(idx==0){

return true;

}

//输出每个root子对象的名称和值

alert("name:"+item.name+",value:"+item.value);

})

注:对于一般的js生成json对象,只需要将$.each()方法替换为for语句即可,其他不变。

同时,从博客中还学习到:

在JS中将JSON的字符串解析成JSON数据格式,有两种方式:eval()和 Function对象完成

第一种:eval()

以jquery异步获取的数据类型——json对象和字符串为依据,分别介绍两种方式获取到的结果处理方式。

1.对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于eval()中执行一次。这种方式也适合以普通javascipt方式获取json对象。

2.对于服务器返回的JSON字符串,如果jquery异步请求将type(一般为这个配置属性)设为“json”,或者利用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可,这里以$.getJSON方法为例说明数据处理方法:

$.getJSON("http://www.phpzixue.cn/",{param:"gaoyusi"},function(data){ //此处返回的data已经是json对象 

//以下其他操作同第一种情况

$.each(data.root,function(idx,item){

if(idx==0){

return true;//同countinue,返回false同break

}

alert("name:"+item.name+",value:"+item.value);

});

});

这里特别需要注意的是方式1中的eval()方法是动态执行其中字符串(可能是js脚本)的,这样很容易会造成系统的安全问题。所以可以采用一些规避了eval()的第三方客户端脚本库,比如JSON in JavaScript就提供了一个不超过3k的脚本库。

第二种使用Function对象来完成

它的典型应用就是在JQUERY中的AJAX方法下的success对于返回数据data的解析

var json=‘{"name":"CJ","age":18}‘;

data =(new Function("","return "+json))();

此时的data就是一个会解析成一个 json对象了.

时间: 2024-08-01 09:44:44

json解析为什么是eval("("+data+")")的相关文章

Javascript调用C#后台方法及JSon解析

Javascript调用C#后台方法及JSon解析 如何使用Ajax 调用C# 后台方法. 本文目录 如何使用Ajax 调用C# 后台方法. 1.后台(.cs)测试方法 2.前台调用(javascript)代码: 在通常的WebForm中,我们通常使用“一般处理程序”来响应Ajax请求.今天我们尝试使用Ajax调用.cs文件的方法. 1.后台(.cs)测试方法 [WebMethod] public static string DisplayImagesInfo() { List<ImageQue

eval(data)和eval(&quot;(&quot;+data+&quot;)&quot;)的区别

如果data是字符串,使用eval("("+data+")")可以将其转换为json对象,和JSON.parse的功能一样.如果data是json对象,使用eval("("+data+")")会报错,正如你描述的错误.eval一个json对象,没有什么作用,这个时候不需要使用eval方法,直接用data即可. 所以,如果你那边能确定后台返回的是字符串,就使用eval("("+data+")&quo

jQuery Ajax请求(关于火狐下SyntaxError: missing ] after element list ajax返回json,var json = eval(&quot;(&quot;+data+&quot;)&quot;); 报错)

$.ajax({ contentType: "application/x-www-form-urlencoded;charset=UTF-8" , type: "POST", url:url, dataType: 'json', data:{}, success: function(data){ } }); 如果后台返回的是一个string类型的json串,则谷歌和IE下将它解析成string类型,而火狐下则会显示成[object xmlDocument],是一个o

var result = eval(&#39;(&#39; + data + &#39;)&#39;);的学习

$.post("url", function(data) { //这里的function(data)这里的data是前端页面获取的后台的返回的数据: var result = eval('(' + data + ')'); //这里的eval是解析后台返回的json格式的数据 if(result.success){ //这里的success和message是后台中放入modelandview中的对象,这里可以获取到 $.messager.alert('提示', result.messa

jquery JSON解析代码

jquery JSON解析说明.这里首先给出JSON字符串集,代码: var data=" { root: [ {name:'1',value:'0'}, {name:'6101',value:'西安市'}, {name:'6102',value:'铜川市'}, {name:'6103',value:'宝鸡市'}, {name:'6104',value:'咸阳市'}, {name:'6105',value:'渭南市'}, {name:'6106',value:'延安市'}, {name:'610

json解析 本地文件和网上文件(通过接口)

json解析 对本地文件解析 NSString *path =[[NSBundle mainBundle] pathForResource:@"movielist" ofType:@"txt"]; // 第二个参数,制定一个容器来接收解析后的数据 NSMutableDictionary *dic =[NSJSONSerialization JSONObjectWithData:data option:NSJSONReadingMutableContainers er

Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)

最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所帮助. 首先按照惯例先来简单了解一些AsyncHttpClient网络框架的一些知识. 1.简介 Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-a

Android JSON 解析库的使用 - Gson 和 fast-json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C.C++.C#.Java.JavaScript.Perl.Python等).这些特性使JSON成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率). GSON是由谷歌官方推出的 JSON 与 Java 对象转化的 Java类库 fast-json 阿里推

JSON解析---初识

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 完全独立于语言的文本格式 易于人阅读和编写 易于解析和生成 (网络传输速度快) JSON语法规则 数据在 名称/值 对中 数据有逗号分隔 花括号保存对象 方括号保存数组 以下是一个.JSON 文件 { "class1":[ { "name":"zhangsan", "age":"14", "tel&quo