【问题标题】:How to access nested JSON data with dynamic variables如何使用动态变量访问嵌套的 JSON 数据
【发布时间】:2018-04-27 10:13:12
【问题描述】:

我遇到了一个问题,我需要使用动态变量访问嵌套的 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 时,如您所见:“Account2”、“Account1”。我不能使用:`$scope.GTMcontainersAccount = response.data.ACCOUNT1;

因为“account1”是动态的,并且会因用户而异。

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

更新:

当我使用时:

 $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]);
                    }

这给了我这个结果:

所以我必须这样写:

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

但这只给了我一行“account2”而不是“account1”

【问题讨论】:

  • 使用 Object.keys() ?遍历所有键?
  • @Adriani6 console.log(Object.keys(response.data));给我“account1”和“account2”而不是键:值本身
  • @Asim 100 万个问题:如果你有对象和键,如何访问这个键的值?
  • 是的,Object.keys(obj).forEach(key =&gt; console.log(obj[key]))

标签: javascript html arrays angularjs json


【解决方案1】:

您需要使用 Object.keys() 来获取对象的键,然后为每个 key 获取相关的 array 并遍历其项目:

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

演示:

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);
    });
  }
});

【讨论】:

  • 我喜欢你如何将其标记为重复然后发布答案:) 无论如何,很好的答案。
  • @Adriani6 这是在1/2小时之前,我看到没有人想把它作为一个dup关闭,他还在努力让它工作,所以我决定回答它:)
猜你喜欢
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多