关联数组不能与eval() JavaScript一起工作

Associative Array does not work with eval() JavaScript

本文关键字:JavaScript 一起 工作 eval 数组 不能 关联      更新时间:2023-09-26

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

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

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

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

您的错误是因为在语句开头的{被读取为代码块(就像您在if s和for s中使用的那种),而不是作为对象字面量。你可以用圆括号括住eval,让它按你想的做:

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

当然,eval是邪恶的,你应该使用像JSON.parse这样的东西来代替。大多数新浏览器都有这个功能,不仅更安全而且更快。

我们需要看到更多的代码…

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,但重要的是要知道它是如何工作的

eval速度慢,效率低,难以调试。别用它。

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

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

使用jquery的$.get()函数,你可以告诉它期望返回一个json字符串(将'dataType'设置为"json"),它会为你创建一个对象,不需要eval()