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

关联数组不适用于eval()JavaScript,javascript,jquery,python,json,Javascript,Jquery,Python,Json,我正在生成一个表示为Python字典的数据,该数据使用simplejson通过url转储,url采用这种格式 {"2": "London", "3": "Tokyo", "4": "Sydney"} 我正在使用$.get并将其存储到变量数据中。 但是eval(data)不会生成关联数组。实际上抛出了一个错误。有什么问题?解决办法是什么 编辑:我已经分享了代码 eval速度慢、效率低且难以调试。不要用它 让脚本输出一个应用程序/json内容类型头,jQuery将自动将json转换为JS对象。我们

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

{"2": "London", "3": "Tokyo", "4": "Sydney"}
我正在使用
$.get
并将其存储到变量数据中。 但是
eval(data)
不会生成关联数组。实际上抛出了一个错误。有什么问题?解决办法是什么

编辑:我已经分享了代码

eval
速度慢、效率低且难以调试。不要用它


让脚本输出一个
应用程序/json
内容类型头,jQuery将自动将json转换为JS对象。

我们需要查看更多代码

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
,但了解它的工作原理很重要。

使用jquery的函数,您可以告诉它返回json字符串(将“数据类型”设置为“json”),它将负责为您创建一个对象,而不是eval()必需。

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

您的错误是因为语句开头的
{
被读取为代码块(类似于
if
s和
for
s中使用的那种)而不是作为对象文字。您可以将括号括起来,让eval按照您的要求执行:

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

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

eval
不是邪恶的。
eval
没有道德指南针,事实上也没有感知力。这只是它想让你思考的。eval可能正在策划毁灭曼金正如我们所说的,我们正在计划统治世界而不是毁灭…我的意思是…(
eval
会杀了我…)我们不需要再看任何代码了。你的代码之所以有效,是因为你在评估与OP不同的东西。请看其他一些回答,如missingno,以获得解释。@jdigital:
eval(数据)
与上面的
eval(x)
是同步的,我确实希望您意识到您在计算“var y={…}”,而他在计算“{…}”。我假设您的意思是“同义”,而不是“同步”;-)@jdigital:我实际上展示了两种评估语句的方法。是的,同义词:)是的,但两者都不同于OP。在任何情况下,这个问题已经被其他人回答了,而不需要看到任何额外的代码。也许我对你的第一句和第二句读得太多了,那么为什么不简单地说“有两种方法可以让这一切顺利进行”。