使用jquery数组访问json对象

时间:2018-04-05 11:09:47

标签: jquery json

我有以这种格式的JSON数据:

{
  "head": {
    "heading": ["header1", "header2", "header3"]
  },
  "body": {
    "elements": [{
        "header1": {
          "value": "value1"
        },
        "header2": {
          "value": "value2"
        }
        "header3": {
          "value": "value3"
        }
      },
      {
        "header1": {
          "value": "value1"
        },
        "header2": {
          "value": "value2"
        }
        "header3": {
          "value": "value3"
        }
      }
    ]
  }

我无法预测标题中的值数量。所以,我最初解析标题中的值并存储在数组中。稍后打印身体元素。我写了以下代码

// data has the parsed json file
var heading = [];
data.head.heading.forEach(function(head) {
  heading.push(head);
});
data.body.elements.forEach( function(elem) {
  for (var head in the heading) {
    var header = heading[head];
    alert(elem.header.value); //not accessing value inside header
  }
});

在使用values.header.value时,它需要访问每个元素的header1header2header3内的值,但它会返回错误

  

TypeError:elem.header未定义

它将值作为标题而不是变量头内的值。有没有办法让它访问变量头内的值?提前谢谢

1 个答案:

答案 0 :(得分:1)

您需要使用括号表示法访问该对象,因为header的值需要用作键,而不是文字词“#header”,例如。

elem[header].value

此外,您的第一个循环完全是多余的,因为您只是复制一个您已有权访问的阵列。试试这个:

data.body.elements.forEach(function(elem) {
  for (var head in data.head.heading) {
    var header = data.head.heading[head];
    console.log(elem[header].value);
  }
});

最后,请注意,通过使用另一个嵌套forEach()调用来迭代data.head.heading,可以使这更加简洁:



var data = {
  "head": {
    "heading": ["header1", "header2", "header3"]
  },
  "body": {
    "elements": [{
      "header1": { "value": "value1" },
      "header2": { "value": "value2" },
      "header3": { "value": "value3" }
    },
    {
      "header1": { "value": "value1" },
      "header2": { "value": "value2" },
      "header3": { "value": "value3" }
    }]
  }
}

data.body.elements.forEach(function(elem) {
  data.head.heading.forEach(function(header) {
    console.log(elem[header].value);
  });
});