所以我有这个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]];
}
答案 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.
之后