javascript - 如何在不使用 eval 的情况下动态访问 JSON 节点?

标签 javascript jquery json eval

路径变量是不可预测的。有时只是a,有时是a/b,有时是a/b/c等。我想根据路径动态到达一个节点.下面的代码表现出我想要的,但我可以考虑是否有更好的方法来做到这一点,例如没有 eval

http://jsfiddle.net/nuonzngv/1/

cont = {
    "a" : {
        "b": {
            "c": "d"
        }   
    }
}
path = "a/b/c";
sect = path.split("/");

path = "cont";
$.each(sect, function( index, value ) {
    path = path + "['" + value + "']";
});

console.log(eval(path));

解决方案

我找到了一个插件,里面有一个 getPath 函数,用于 underscore.js: https://github.com/documentcloud/underscore-contrib/blob/master/docs/underscore.object.selectors.js.md

最佳答案

你能直接在循环中访问你的 cont 对象吗?如果是这样:

var cont = {
    "a" : {
      "b": {
        "c": "d"
      }   
    }
  },
  o = cont,
  path = "a/b/c",
  sect = path.split("/");

path = "cont";
$.each(sect, function(index, value) {
  path = path + "['" + value + "']";
  if (o) o = o[value];
});

console.log(path+'='+o);

给出:

cont['a']['b']['c']=d

无效路径将返回undefined


*编辑:psibernetic 的评论建议创建一个独立的函数:

function GetByPath(obj, path) {
  var result = obj;
  $.each(path.split("/"), function(index, value) {
    if (typeof result !== 'undefined' && result !== null) {
      result = obj[value];
    }
  }
  return result;
}

关于javascript - 如何在不使用 eval 的情况下动态访问 JSON 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27028868/

相关文章:

php - 如何为事件菜单项提供不同的样式

javascript - 外部 JS 文件中的 Twig 变量

javascript - 在 Gatsbyjs 中将 csv 文件转换为 json

ios - JSON 解析在 IOS 中获取错误 NSErrorFailingURLKey

javascript - 我需要将表格中的数据提取到 JavaScript 图表中

javascript - JQuery - 在没有 if 条件的情况下在选择选项中选择数据的随机代码生成器

javascript - 在 SVG 图像和 HTML 页面中引用相同的 javascript 文件

javascript - 使用 AWS S3 存储桶的授权错误

javascript - 如何使用JS获取h1标签的值?

Java android AsyncHttpClient 如何设置 header 'Accept' 'application/xml' 或 'application/json'