在javascript中正确使用eval?
因此,我有一个json对象,其中的结构是可变的,这取决于您检索数据的方式。假设对象在一种情况下如下所示:在javascript中正确使用eval?,javascript,eval,Javascript,Eval,因此,我有一个json对象,其中的结构是可变的,这取决于您检索数据的方式。假设对象在一种情况下如下所示: { "status": "success", "data": { "users": [...] } } 但在另一种情况下看起来是这样的: { "status": "success", "data": { "posts": [...] } } 对于第一个示例,我动态获取数据的方式如下: var dataLocation = 'data.users';
{
"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]';
这是在清除了数据位置中的数据之后。
的确切副本参见