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