【问题标题】:how to access nested json objects with access information specified elsewhere without using eval or iteration?如何在不使用 eval 或迭代的情况下访问具有在其他地方指定的访问信息的嵌套 json 对象?
【发布时间】:2012-09-03 15:19:08
【问题描述】:

我有一个类似的 JSON 对象;

 var data = {
 Name : "test name",
 Type : "test type",
 VendorInfo :{
               FirstName : "Vendor First Name",
               LastName : "Vendor Last Name",
               Address : "Vendor Address",
               City : "Vendor City",
               ZipCode : "Zip"
             }
 }

现在我想单独保留有关如何访问数据变量中的字段的信息

var accessInfo=[
    { fieldName : "Name", actionName : "Edit" },
    { fieldName : "Type", actionName : "Edit" },
    :
    :etc..
 ]

现在在我的 javascript 中,我可以通过 for 循环遍历 accessInfo 数组,例如;

for(var i=0;i<accessInfo.length;i++){
data[accessInfo[i].fieldName] = "changed field";
}

这适用于顶级字段,但我无法弄清楚如何访问层次结构中较低的字段......如 data.VendorInfo.FirstName、data.VendorInfo.LastName 等。

这有可能吗?我尝试输入“VendorInfo.FirstName”和 [VendorInfo][FirstName],但不行..

【问题讨论】:

    标签: javascript json navigation


    【解决方案1】:

    你只需要解析你的访问规范来遍历目标对象。你可以使用这样的函数:

    function getProp(obj, propName) {
       var prop;
       var props = propName.split('.');
       for (var i = 0; i < props.length; i++) {
          prop = obj[props[i]];
          if (typeof prop === 'null' || typeof prop === 'undefined') return prop;
       }
      return prop;
    }
    

    【讨论】:

    • 我认为您的答案中的 getProp() 将返回道具的值,我需要能够更改它,这就是我尝试直接访问它的原因..
    • 你可以类似地做一个方法assignProp(obj, propName, value),只在你到达对象的叶子节点之前赋值,这样你就通过引用来做:obj[props[i] ] = 新值
    • 是的,我想我可以。我想有没有办法直接做到这一点,因为我正在尝试?标记为已回答,感谢您的帮助以利亚
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多