[转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")

时间:2021-07-20 08:15:36
javascript eval函数解析json数据时为什么 加上圆括号?
为什么要 eval这里要添加 “("("+data+")");//”呢?
 
原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

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

****************************************************************************************************************************************************************************************

《javascript 高级程序设计 第二版》page73,第五章,引用类型

5.1object类型

到目前为止,我们看到的大多数引用类型值都是object类型的实例;而且,object也是ECMAScript中使用最多的一个类型。虽然object的实例不具备多少功能,但对于在应用程序中存储和传输数据而言,它们确实是非常理想的选择。

创建object实例的方式有两种。第一种是使用new操作符后跟object构造函数,如下所示:

var person=new object();

person.name="Nicholas";

person.age=29;

另一种方式是使用对象字面量表示法。对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。下面这个例子就使用了对象字面量语法定义了与前面那个例子中相同的person对象:

var person={

name:"Nicholas",

age:29

};

在这个例子中,左边的花括号({)表示对象字面量的开始,因为它出现在了赋值操作符的后面(在其他环境中,左花括号表示的是语句块的开始)。然后,我们定义了name属性,之后是一个冒号,再后面是这个属性的值。在对象字面量中,使用逗号来分隔不同的属性,因此“Nicholas”后面是一个逗号。但是,在age属性的值29的后面不能添加逗号,因为age是这个对象的最后一个属性。在最后一个属性后面添加逗号,会在IE及Opera中导致错误。

在使用对象字面量语法时,属性名也可以使用字符串,如下面这个例子所示:

var person={

"name":"Nicholas",

"age":29

};

以上代码也会得到与前面例子相同的结果;创建一个带有name和age属性的新对象。

另外,使用对象字面量语法时,如果留空其花括号,则可以定义只包含默认属性和方法的对象,

---下面这个是天蓝自己找的---

http://www.zhihu.com/question/19884767

在 JavaScript 中,怎样把一个对象转化成 JSON 字符串?

用或者不用 jQuery。
是问如何把js对象方便的转为json字符串哦~~

(而不是把json字符串变成js对象)

[转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")滕金光我是一名二把刀程序猿。

知乎用户、张运政张世兵 等人赞同
JSON.stringify 把一个对象转换成json字符串,

JSON.parse 把一个json字符串解析成对象。

[转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")SUN Ruoyu@ruoysun CUHK, study accounting, love …

官方的Implementation https://github.com/douglascrockford/JSON-js
不推荐eval的方法,太危险。
 

工程师

jquery木有
这里有:
http://tangram.baidu.com/api.html#baidu.json.stringify
http://code.google.com/p/jquery-json/

补充一点:楼上楼下你们仔细看题了么?

[转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")张轩前端开发工程师 http://www.vikingmute.com

第一种方法 用jquery的方法 $.parseJSON()
第二种 去官网下载一个json2.js 然后用json.parse()方法 这个方法firefox chrome是直接支持的 ie需要引入json2.js

不推荐eval方法 具体还可以参看这个帖子 相当详细

http://*.com/questions/45015/safely-turning-a-json-string-into-an-object

[转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")知乎用户,程序员

https://gist.github.com/754454
这里有个 jQuery plus. 自己可以转化成 JavaScript 版本(不依赖jQuery)
 
soar网络攻城湿
 
刚自己找了http://www.css88.com/archives/3919上面说的,http://www.json.org/提供了一个json.js可以处理这个问题,需要到https://github.com/douglascrockford/JSON-js上获取

[转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")rambojavascript程序员

如果你不需要ie6的话 完全可以使用JSON的官方api啊
如果你有jquery 为什么不直接使用呢?

其次 我一直认为json数据格式 就是类似前端对象格式啊{} 我说类似啊 类似

[转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")朱勃后摇/JavaScript/爱猫青年

不好意思因为我光看上面答案了,没仔细看题。
现代浏览器中提供了JSON.stringify()方法,用来实现这个功能。
json2.js中对不支持JSON.stringify()的浏览器增加了支持,可以见其源代码。
----------------------------------------------------
下面是我发现自己看错之前打出来的,不想删了。
现代浏览器有一个JSON对象,JSON的parse方法可以把字符串格式化成json。
jStr={"a":"b"}
jObj=JSON.parse(jStr);

但是这个方法比较严格:

  1. 键必须加上引号,比如{"key":"sometext"},如果没有引号{key:"sometext"}就会报错。(其实json的标准就是这个样子,对于不会后台语言的新手来说,手写json字符串就可能忘掉键上的那对引号。)
  2. 如果你的键或者值中含tab形成的跳格,也会报错。

对于没有JSON对象的浏览器,可以使用eval():

jStr={"a":"b"}
jObj=eval("("+jStr+")")

eval比较宽松,但是会有潜在的安全性问题。
比如:

jStr = {
"a": (function() {
alert(1)
})()
}

jQuery中自带jQuery.parseJSON()封装了json字符串转对象的功能,其原理是优先使用原生JSON.parse;如果没有,则用eval。使用eval之前jQuery会对字符串进行安全性处理。(所以有时候你的json不严格可能导致chrome下报错而IE6反而没问题。)
json2.js同。所以最好是使用jQuery,如果你嫌大了(几十k也算大的话),就用json2.js

[转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")的更多相关文章

  1. javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")

    原因很简单:因为在js中{}表示一个语句块(代码段),所有加上"()"表示表达式

  2. eval函数解析json数据时加上圆括号的原因

    var temp = eval("(" + data + ")"); //解析json数据 json是以”{}”的方式来开始以及结束的,在JS中,“{}”会被当 ...

  3. js的eval函数解析后台返回的json数据时为什加上圆括号eval("("+data+")"),而HTML页面定义的数据不用

    一,情况如下,这是成功代码: $(function () { $.ajax({ url: "Demo.aspx", type: "post", data: { ...

  4. eval() 函数 解析json对象

    eval在js中用来运行以js源码组成的字符串. 可以用来改变全局或者局部变量,例如: var globalEval = eval; //定义全局eval函数别名 var a ='global', b ...

  5. 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

    1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...

  6. 使用javascript的eval函数解析json字符串,提示“not avalible”怎么办?

    按照最简单的形式,可以用下面这样的 JSON 表示"名称 / 值对": var jsonString = '{ "firstName": "Brett ...

  7. eval函数处理JSON数据需要加括号

    在将服务器端构建好的JSON数据转化为可用的JavaScript对象时常常使用eval函数.如下: var dataJson = eval('(' + data + ')'); 在转化的时候需要将JS ...

  8. VBA中使用JavaScript脚本语言解析JSON数据

    JSON:JavaScript 对象表示法(JavaScript Object Notation) 和xml相似,都是文本形式(保存在文本文件中或字符串等形式),比如: jsstr = {" ...

  9. 使用原生javascript和jQuery解析json数据

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式. JSONM文件中包含了关于“名称”和“值”的信息. 有时候我们需要读取JSON格式的数据文件,在jQuer ...

随机推荐

  1. git回滚错误提交

    git log //找到你要回滚的那次提交 比如:43596f6b1f57157e627c25ae7a843f60157ac52d git reset --hard HEAD~43596f6b1f57 ...

  2. spring纯java注解式开发(一)

    习惯了用XML文件来配置spring,现在开始尝试使用纯java代码来配置spring. 其实,spring的纯java配置,简单来说就是将bean标签的内容通过注解转换成bean对象的过程,没什么神 ...

  3. if(username.equals(“zxx”){}

    1. if(username.equals(“zxx”){} username可能为NULL,会报空指针错误:改为"zxx".equals(username) 2.  int  x ...

  4. html-----007

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 老李分享:《Linux Shell脚本攻略》 要点(一)

    老李分享:<Linux Shell脚本攻略> 要点(一)   第一章:Shell起步基础 1.变量:在bash中,每一个变量的值都是字符串.无论你给变量赋值时,有没有使用引号,值都会以字符 ...

  6. 动态添加弹出页面(shiro项目中来的七)

    一,图解 二,代码 2.0,新增代码 //打开编辑属性(新增) function dialog_open(){ $("#dialog-add").css("display ...

  7. JDBC的DBUtils源码

    DBUtils源码: package com.it.util; import java.sql.Connection; import java.sql.DriverManager; import ja ...

  8. NGUI的UISprite动态染色的一种方法

    本文主要参考iwinterice 的 NGUI的UISprite动态染色的一种解决方案 文章. 参考参考,就是既参详又拷贝,-,-||| 相关理论依据,还请去移步 NGUI的UISprite动态染色的 ...

  9. tyvj1061Mobile Service

    题目:http://www.joyoi.cn/problem/tyvj-1061 dp.枚举三个人现在的位置. 1.重点:当前必有一人正处在查询点上!于是省掉一维. 2.转移方程枚举上一阶段的 j 和 ...

  10. Linux 安装PAE内核

      客户软件是部署在32位的CentOS5服务器当中,CentOS5目前只能识别4G内存,需要安装PAE内核,让系统支持PAE物理地址扩展. 1.安装PAE内核 yum -y install kern ...