动态形成JSON对象traversion而不使用eval

时间:2010-03-26 20:20:15

标签: javascript json eval

鉴于我有以下内容:(动态生成并且长度不同)

associations = ["employer", "address"];

尝试遍历JSON对象,并希望形成如下内容:

data.employer.address

data[associations[0]][association[1]]

不这样做:

eval("data."+associations.join('.'));

最后,我可能会因此而避而不谈,但是在这样的实例中使用eval是否可以?只需检索数据。

3 个答案:

答案 0 :(得分:1)

为什么不迭代您的关联?

function traverse(data, associations){
  for (var i=0; i<associations.length; i++){
      data = data[associations[i]];
  }
  return data;
}

您的eval方法必须生成一个新字符串并解析代码,然后才能开始遍历。

答案 1 :(得分:0)

这是使用Prototype的一种方式。

$A(associations).inject(data, function (obj, method) {
  return obj[method];
});

如果您可以保证用户无法影响您传递给它的字符串,那么使用eval就可以了。如果您的输入来自用户或来自用户可能更改的网址,则应该避免eval

答案 2 :(得分:0)

您始终可以创建动态脚本节点。例如:

var yo = document.createElement("script");
yo.setAttribute("type", "text/javascript");
yo.innerHTML = "alert('yo!');";
document.body.appendChild(yo);

不需要评估。