在javascript中正确使用eval?

时间:2013-04-23 14:15:09

标签: javascript eval

所以我有这个json对象,其结构是可变的,具体取决于你如何检索数据。让我们说在一种情况下对象看起来像这样:

{
  "status": "success",
  "data": {
    "users": [...]
  }
}

但在另一种情况下看起来像这样:

{
  "status": "success",
  "data": {
    "posts": [...]
  }
}

现在对于第一个例子,他们动态获取数据的方式如下:

var dataLocation = 'data.users';
var responseData;
eval('responseData = response.' +dataLocation + ';');

这允许我配置它。请注意,这只是一个简单的例子,在实际代码中只有一个函数来解析数据,我将作为参数传递给dataLocation。

现在我的第一个问题是,是否有更好的想要在不使用eval的情况下实现同一目标?

如果没有,第二个问题是我需要对eval语句做些什么来确保它是安全的(dataLocation永远不应该从用户传入,它总是来自代码,但仍然)。

更新

根据Bergi的评论,我现在正在使用它:

var parts = dataListLocation.split('.');

for(var x = 0; x < parts.length; x += 1) {
  responseData = responseData[parts[x]];
}

2 个答案:

答案 0 :(得分:2)

您应该使用括号表示法而不是eval

var responseData = response['data']['users'];

注意:根据您的描述,您拥有的是JavaScript对象文字。 JSON将是编码为字符串的相同对象(例如,使用JSON.stringify)。没有“JSON对象”这样的东西,你有一个JavaScript对象或一个JSON字符串。

答案 1 :(得分:0)

您可以在JS中使用键索引器:

var responseData response.data['users]';

这是在我们的dataLocation

中删除data.之后