1

所以我有这个 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]];
}
4

2 回答 2

2

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

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

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

于 2013-04-23T14:17:02.003 回答
0

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

var responseData response.data['users]';

那是在摆脱data.我们的 dataLocation 之后

于 2013-04-23T14:17:36.170 回答