关联数组不适用于eval()JavaScript

时间:2011-07-18 19:23:22

标签: javascript jquery python json

我正在生成一个表示为Python字典的数据,该字典使用simplejson通过url转储,格式为此格式。

{"2": "London", "3": "Tokyo", "4": "Sydney"}

我正在使用$.get并存储到可变数据中。 但是eval(data)不会生成关联数组。实际上会抛出一个错误。问题是什么?解决方案是什么?

编辑:我已经分享了代码 http://dpaste.com/570901/

5 个答案:

答案 0 :(得分:6)

您的错误是因为语句开始时的{被读取为代码块(就像您在iffor中使用的类型)而不是对象文字。你可以根据需要在eval周围加上括号:

eval('(' + str + ')');

当然,eval是邪恶的,你应该使用类似JSON.parse的东西。大多数新浏览器都有此功能,它不仅更安全,而且速度更快。

答案 1 :(得分:4)

我们需要看到更多代码...

var x = '{"2": "London", "3": "Tokyo", "4": "Sydney"}';

eval('var y = ' + x);
      // or
var y = eval('(' + x + ')');

console.log(y);
console.log(y["2"]);

以上工作正常。你究竟在做什么/不做什么?

PS:你不应该使用eval,但重要的是要知道它是如何工作的。

答案 2 :(得分:2)

eval缓慢,低效且难以调试。不要使用它。

让您的脚本输出application/json内容类型标头,jQuery会自动将JSON转换为JS对象。

答案 3 :(得分:2)

请记住,您正在评估JavaScript代码而不是JSON。从它的外观来看,你的字符串将评估为一个块,但第一部分在语法上是不正确的。 ("2":接近带标签的声明,但没有雪茄。)您需要将字符串括在括号中,将其视为对象文字。

答案 4 :(得分:1)

使用jquery的$.get()函数,你可以告诉它期望返回一个json字符串(将'dataType'设置为“json”),它将负责为你创建一个对象,没有eval()必需的。