在javascript中正确使用eval?

在javascript中正确使用eval?,javascript,eval,Javascript,Eval,因此,我有一个json对象,其中的结构是可变的,这取决于您检索数据的方式。假设对象在一种情况下如下所示: { "status": "success", "data": { "users": [...] } } 但在另一种情况下看起来是这样的: { "status": "success", "data": { "posts": [...] } } 对于第一个示例,我动态获取数据的方式如下: var dataLocation = 'data.users';

因此,我有一个json对象,其中的结构是可变的,这取决于您检索数据的方式。假设对象在一种情况下如下所示:

{
  "status": "success",
  "data": {
    "users": [...]
  }
}
但在另一种情况下看起来是这样的:

{
  "status": "success",
  "data": {
    "posts": [...]
  }
}
对于第一个示例,我动态获取数据的方式如下:

var dataLocation = 'data.users';
var responseData;
eval('responseData = response.' +dataLocation + ';');
这允许我配置它。请注意,这只是一个简单的示例,在实际代码中只有一个函数来解析数据,我将作为参数传递给dataLocation

现在我的第一个问题是,是否有更好的方法来实现相同的目标而不使用eval

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

更新

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

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

for(var x = 0; x < parts.length; x += 1) {
  responseData = responseData[parts[x]];
}
var parts=dataListLocation.split('.');
对于(变量x=0;x
您应该使用括号符号,而不是
eval

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

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

您可以对JS中的对象使用键索引器:

var responseData response.data['users]';
这是在清除了数据位置中的
数据之后。
的确切副本参见