为什么JS中eval处理JSON数据要加括号

这篇文章主要介绍了为什么JS中eval处理JSON数据要加括号的相关资料,需要的朋友可以参考下
 

由于Ajax的兴起,JSON这种轻量级的数据格式作为客户端与服务器之间的传输格式逐渐地流行起来,进而出现的问题是如何将服务器端构建好的JSON数据转化为可用的JavaScript对象。利用eval函数无疑是一种简单而直接的方法。在转化的时候需要将JSON字符串的外面包装一层圆括号:

  代码如下:

var jsonObject = eval("(" + jsonFormat + ")");

为什么要加括号?

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:

 代码如下:

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

 

在使用eval生成JSON对象时,一定要注意添加一对圆括号
 
例如:var json = eval('('+ret+')');
假设我们在服务器端使用php的encode_json()生成需要返回的字符串
如果生成的字符串是[{"name":"boke"},{"age":"23"}],
我们可以直接使用eval([{"name":"boke"},{"age":"23"}])生成相应的JSON对象;
如果生成的字符串是{“name":"boke","age":"23"},
我们使用eval({“name":"boke","age":"23"})生成JSON对象时就会出错
,我们需要这样写eval(({“name":"boke","age":"23"}))。
eval(( ))的写法同样适用于包括第一种情况在内的其它通过encode_json()函数生成的字符串
也可以不用eval,用一个特殊的 
function getdata(data){ 
  return (new Function("return "+data))(); 
} 

  

posted @ 2016-07-07 13:55  寅春树  阅读(481)  评论(0编辑  收藏  举报