用于解析JSON的JavaScript eval()的替代方法

快速问题。 JavaScript中的Eval是不安全的,不是吗? 我有一个JSON对象作为字符串,我需要把它变成一个实际的对象,所以我可以获取数据:

function PopulateSeriesFields(result) { data = eval('(' + result + ')'); var myFakeExample = data.exampleType } 

如果它有助于我使用jQuery中的$ .ajax方法。

谢谢

好吧,安全与否,当你使用jQuery时,你最好使用$ .getJSON()方法,而不是$ .ajax():

 $.getJSON(url, function(data){ alert(data.exampleType); }); 

当您仅与自己的服务器通信时,尤其是当您在服务器端使用良好的JSON库时, eval()通常被认为是安全的JSON解析,以确保生成的JSON不包含任何令人讨厌的东西。

即使是JSON的作者Douglas Crockford也表示,除了解析JSON之外,你不应该在代码中的任何地方使用eval() 。 请参阅JavaScript:The Good Parts一书中的相应部分

您应该使用JSON并编写JSON.parse。

“手动”解析速度太慢,因此库中的JSON.parse实现会检查内容然后最终使用eval,因此它仍然不安全 。 但是,如果您使用的是较新的浏览器(IE8或Firefox),则库代码实际上并未执行。 相反, 本机浏览器支持开始,然后你是安全的。

在这里和这里阅读更多。

如果你不相信来源,那么你是正确的… eval是不安全的。 它可以用于将代码注入您的页面。

查看此链接以获得更安全的替代方案:

Javascript中的JSON

该页面解释了为什么eval不安全,并提供了指向页面底部的JSON解析器的链接。

不安全? 这取决于您是否可以信任数据。

如果你可以相信字符串将是JSON(并且不包括,例如,函数)那么它是安全的。

也就是说 – 如果您使用的是jQuery,为什么要手动执行此操作? 使用dataType选项指定它是JSON并让库为您处理它。

如果您使用的是jQuery,那么从版本1.4.1开始,您可以使用jQuery.parseJSON()

看到这个答案: 使用jquery解析安全json?

使用JavaScript的eval是不安全的。 因为JSON只是JavaScript的一个子集,但JavaScript的eval允许任何有效的JavaScript。

使用真正的JSON解析器,如json.org中的JSON解析器 。

评估代码的替代方法是手动解析它。 它并不像听起来那么难,但在运行时却相当重。 你可以在这里读到它。

需要注意的重要部分是评估JSON本身并不安全。 只要你相信来源不要球。 这包括确保传入JSON编码器的内容被正确转义(以阻止用户在用户机器上执行代码的流程2步)。

你可以这样试试

 var object = new Function("return " + jsonString)() 

另一个很好的选择是YUI:http: //yuilibrary.com/yui/docs/json/

所以你的代码将是这样的:

 Y.JSON.parse('{"id": 15, "name": "something"}');