`

【转】JavaScript 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]


自制实例:
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
分享到:
评论

相关推荐

    javascript eval和JSON

    通过本文的介绍,我们可以了解到`eval`函数在处理字符串形式的JavaScript代码方面的强大功能,以及在JSON数据转换过程中的应用。同时,我们也应该注意到在实际项目中避免滥用`eval`的重要性,尤其是在处理用户提交的...

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

    总结一下,JS中eval处理JSON数据要加括号的原因是为了确保`eval()`将JSON字符串解析为表达式,从而创建JavaScript对象。然而,为了代码的安全性和性能,推荐使用`JSON.parse()`替代`eval()`来处理JSON数据。

    巧用eval解析json对象

    在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务与客户端之间的数据传输。它以其简洁、易于读写的特点深受开发者喜爱。本篇将聚焦于如何巧妙地使用`eval`函数来解析...

    javascript中eval解析JSON字符串.docx

    在实际开发中,应该尽量避免使用`eval()`,特别是在处理来自不可信源的数据时。 #### 六、参考资料 - [MDN Web Docs - eval()]...

    json------javascript eval()以及Example

    在处理JSON数据时,`eval()`曾被用来解析JSON字符串为JavaScript对象。例如,当你从服务器接收到一个JSON格式的字符串,你可以使用`eval()`将其转换为可操作的对象: ```javascript var jsonString = '{"name":...

    Android处理JSON数据-JSON简介.pdf

    3. **解析简便**:在JavaScript环境下,可以直接使用`eval()`函数解析JSON数据,而在其他语言中也有专门的解析库支持。 4. **跨语言支持**:JSON被多种编程语言所支持,如ActionScript、C、C#、ColdFusion、Java、...

    js下用eval生成JSON对象.docx

    然而,当涉及到从服务器端获取JSON数据并将其转换为JavaScript对象时,`eval()`通常被用来解析这些数据。但是,这种方法存在一定的安全风险,因此在实际开发中,推荐使用更安全的JSON.parse()方法。 在描述中提到,...

    Json数据格式的使用方法入门教程.pdf

    在JavaScript中,解析JSON数据非常简单,可以使用`JSON.parse()`函数将JSON文本转换为JavaScript对象,或者直接使用`eval()`函数(不推荐,因为有安全风险)。例如: ```javascript let jsonStr = '{"name":...

    会使用到的json数据

    例如,在JavaScript中,JSON数据可以直接通过eval函数或者JSON.parse方法转换成JavaScript对象进行操作;在Python中,也有json模块提供类似功能。 由于JSON格式的普及,一些编程语言已经将其作为一种标准的数据交换...

    javascript中eval解析JSON字符串

    我们都知道,高级浏览器可以用 JSON.parse() API 将一个 JSON 字符串解析成 JSON 数据,稍微欠妥点的做法,我们可以用 eval() 函数。 var str = '{"name": "hanzichi", "age": 10}'; var obj = eval('...

    javascript eval和JSON之间的联系

    在处理JSON数据时,`eval`函数经常被用来将JSON字符串转换为JavaScript对象。这是因为JSON格式的字符串可以直接映射到JavaScript的对象结构。然而,直接使用`eval`可能存在安全风险,因为它可以执行任何JavaScript...

    JavaScript处理解析JSON数据过程详解

    JavaScript处理JSON数据主要涉及到以下几个关键知识点: 1. **JSON数据格式**:JSON是一种轻量级的数据交换格式,它基于JavaScript的一个子集。JSON格式的数据结构简单,易于读写,同时也被广泛支持。基本数据类型...

    js使用eval解析json(js中使用json)

    在处理JSON数据时,`eval()`曾经被广泛用于将JSON字符串转化为JavaScript对象,尤其是在早期JSON还没有成为标准之前。然而,这种方法并不推荐,因为它可能会导致代码注入攻击,特别是当JSON数据来自不受信任的源时。...

    JS中的eval 为什么加括号

    在标题和描述中提到的"JS中的eval为什么加括号",这个问题通常与如何正确地使用`eval`来解析JSON字符串有关。 在JavaScript中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于...

    js读取解析JSON数据.doc.docx

    由于JSON是JavaScript原生格式,因此在JavaScript中处理JSON数据非常直观,无需额外的API或库。以下是对JS操作JSON的一些关键点的详细说明。 1. JSON数据结构: - **对象(Object)**:以大括号`{}`开始,以大括号...

    json2手册.doc

    总结来说,`json2.js` 提供了在旧版JavaScript环境中处理JSON数据的功能,包括解析JSON字符串为JavaScript对象以及将JavaScript对象转换为JSON字符串。在进行前后端交互时,理解并正确使用JSON和`json2.js`对于有效...

    JavaScript的eval JSON object问题

    4. JSON与eval函数的结合:在AJAX开发中,一种常见的做法是在客户端回调函数中使用eval函数将服务器返回的JSON格式字符串转换成JavaScript对象,以便于后续的数据操作和使用。代码示例如下:`var jsonData = eval...

    JSON基础归纳整理

    10. 把JSON文本转换为JavaScript对象是JSON数据处理的常见用法。可以使用JavaScript内置的eval()函数进行转换,但需要注意安全性问题,因为eval()会执行字符串中的代码。更安全的替代方法是使用JSON.parse()函数,它...

Global site tag (gtag.js) - Google Analytics