【转】JavaScript eval处理JSON数据 为什么要加括号

本文探讨了如何将JSON数据转化为JavaScript对象,重点介绍了使用eval函数进行转换时的注意事项及其潜在的安全问题,并推荐了使用JSON解析器的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于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]


自制实例:
var test = 'x=10;y=20;document.write(x*y)';
alert(test); // 打印上述字串
eval(test); // 执行上述代码,页面上显示200
针对{}而言,做特殊处理,是为了解决Json格式的问题。因为Json对象以{开始,}结束。
而Json对象要能用,必须使用eval转换为Javascript对象。


由于eval() 函数可编译并执行任何 JavaScript 代码。这隐藏了一个潜在的安全问题。
var json = {
message: (function () { window.location='http://zh.wikipedia.org/wiki/JSON#.E5.AE.89.E5.85.A8.E6.80.A7.E5.95.8F.E9.A1.8C'; })()
};
eval执行上述代码时,页面就会导向到wiki

因此,使用eval的情况很少,通常
使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。
通过浏览器原生支持的 JSON.parse(str) 方法读取 JSON 数据
或者使用Web 软件支持,如Jquery
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值