如何从嵌套的JSON

时间:2017-03-06 07:18:18

标签: javascript jquery json

我有一个包含对象和数组的(嵌套)数据结构。如何提取信息,即访问特定或多个值(或键)?

  {
    "data": [{
      "name": "name1",
      "value": "value1",
      "list": [{
        "sname": "sname1",
        "svalue": "svalue1"
      }, {
        "sname": "sname2",
        "svalue": "svalue2"
      }]
    }]
  }

的jQuery

var pk = $("#pk").val();
console.log(pk);
url = "/register/search?id=" + pk;
console.log(url);
$('#largeTable').DataTable({
  "ajax": url,
  "bDestroy": true,
  "columns": [{
      "data": "name"
    },
    {
      "data": "value"
    },
    {
      "data": "list.1.sname"
    },
    {
      "data": "list.1.svalue"
    },
    {
      "data": null,
      "defaultContent": editview
    }
  ]
});

此处可以使用list.1或list.0

显示第一个或第二个列表值

但我一次想要两个值。

另外,我如何访问svalue中第二项的list

我尝试使用data.list[1]但是:

  

TypeError:data.list未定义

2 个答案:

答案 0 :(得分:0)

由于data是一个数组,您应首先获取该项 - 并且由于您只有一个项目 - 您使用data[0],然后可以访问listdata[0].list[1]这样的属性 - 这将为您提供list中的第二项 - 但由于您对此项目的特定属性(svalue)感兴趣,因此您将像这个:data[0].list[1].svalue

更好的方法是遍历数据数组中的项目 - 然后对每个项目循环遍历列表数组中的项目。请参阅@ Rajesh的评论。 我希望有所帮助;

答案 1 :(得分:0)

具体来说,您可以像object.data[0].list[1].svalue一样访问它。 data.list undefined的原因是因为data对应于数组data: [{ }]这就是我们使用data[0]的原因,但data本身就是关键在一个对象中,所以在你到达data之前,你需要访问它。如果data所在的对象名称为object (就像我在下面所做的那样),那么就可以像object.data[0]

那样访问它



const object = {
  "data": [{
    "name": "name1",
    "value": "value1",
    "list": [{
      "sname": "sname1",
      "svalue": "svalue1"
    }, {
      "sname": "sname2",
      "svalue": "svalue2"
    }]
  }]
}

console.log(object.data[0].list[1].svalue)