关联数组在JavaScript中与eval()不起作用

4 投票
5 回答
4017 浏览
提问于 2025-04-16 21:47

我正在生成一个用Python字典表示的数据,这些数据通过简单的json格式从一个网址获取,格式如下。

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

我使用了 $.get 方法,并把结果存储在一个变量中,叫做data。可是当我用 eval(data) 时,并没有生成一个关联数组,反而出现了错误。这是什么问题呢?有什么解决办法吗?

补充:我已经分享了代码,链接在这里:http://dpaste.com/570901/

5 个回答

6

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

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

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

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

上面的代码运行得很好。你到底在做什么/没做什么呢?

另外,不管怎样,你都不应该使用 eval,但了解它是怎么工作的还是很重要的。

9

你的错误是因为在语句开头的一个 { 被当作代码块来理解(就像你在 iffor 中使用的那种),而不是当作一个对象字面量。你可以加上括号,这样 eval 就能按照你想要的方式执行:

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

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

2

eval这个东西很慢,不够高效,而且不容易调试。尽量不要用它。

让你的脚本输出一个 application/json 的内容类型头,jQuery会自动把JSON转换成JavaScript对象。

撰写回答