如何使用动态变量访问嵌套的JSON数据

时间:2017-11-14 12:41:19

标签: javascript html arrays angularjs json

我遇到了一个需要使用动态变量访问嵌套JSON的问题。这是我的JSON:

{
    "Account2": [{
        "accountId": "17467****",
        "containerId": "7454***",
        "path": "accounts\/17467*****\/containers\/7454***",
    }, {
        "accountId": "17467****",
        "containerId": "7519***",
        "path": "accounts\/17467****\/containers\/7519***",
    }],
    "Account 1": [{
        "accountId": "17661****",
        "containerId": "7483***",
        "path": "accounts\/17661****\/containers\/7483***",
    }]
}

在前端使用AngluarJS我用它来打印表格,在这里我可以使用"路径"变量使用href,然后基于url参数进行第二次API调用,如下所示:

<td><a href="/gui/tags/{{v1.path}}">View Container</a></td>
  

v1.path = accounts / 17467 ***** / containers / 7454 ***

现在我的问题是,我想在点击表格之前发送此电话以显示一些数据。问题是当访问具有动态变量的JSON时,您可以看到:&#34; Account2&#34;,&#34; Account1&#34;。我不能使用:`$ scope.GTMcontainersAccount = response.data.ACCOUNT1;

因为&#34; account1&#34;是动态的,并且从用户变为用户。

有人有想法吗?正则表达式?

更新:

当我使用时:

 $scope.GTMcontainersAccount = response.data;
                    $scope.keys = Object.keys(response.data);
                    for(n in $scope.keys)
                    {
                       $scope.asim = $scope.keys[n];
                       console.log($scope.asim);
                       console.log(response.data[$scope.asim]);
                    }

这给了我这个结果:

enter image description here

所以我必须这样写:

console.log(response.data[$scope.asim][0].accountId);

但是这只给了我一行&#34; account2&#34;不是&#34; account1&#34;

1 个答案:

答案 0 :(得分:1)

您需要使用 Object.keys() 来获取对象的密钥,然后为每个key获取相关的array并循环其项目:< / p>

Object.keys(data).forEach(function(key) {
  let accounts = data[key];
  if (accounts && accounts.length) {
    accounts.forEach(function(account) {
      console.log(account);
    });
  }
});

<强>演示:

&#13;
&#13;
let data = {
  "Account2": [{
    "accountId": "17467****",
    "containerId": "7454***",
    "path": "accounts\/17467*****\/containers\/7454***",
  }, {
    "accountId": "17467****",
    "containerId": "7519***",
    "path": "accounts\/17467****\/containers\/7519***",
  }],
  "Account 1": [{
    "accountId": "17661****",
    "containerId": "7483***",
    "path": "accounts\/17661****\/containers\/7483***",
  }]
};

Object.keys(data).forEach(function(key) {
  let accounts = data[key];
  if (accounts && accounts.length) {
    console.log(key+": ");
    accounts.forEach(function(account) {
      console.log(account);
    });
  }
});
&#13;
&#13;
&#13;