getJSON无法获取子值

时间:2017-06-22 08:54:22

标签: javascript jquery html arrays json

我从API获取数据。 API的格式如下:

{
   "total":1,
   "launches":[
  {
     "name":"Falcon 9 Full Thrust | BulgariaSat-1",
     "net":"June 23, 2017 18:10:00 UTC",
     "location":{
        "pads":[
           {
              "name":"Launch Complex 39A, Kennedy Space Center, FL",
              "agencies":[
                 {
                    "name":"SpaceX"
                 },
                 {
                    "name":"National Aeronautics and Space Administration"
                 }
              ]
           }
        ],
        "name":"Kennedy Space Center, FL, USA"
     },
     "rocket":{
        "name":"Falcon 9 Full Thrust",
        "agencies":[
           {
              "name":"SpaceX"
           }
        ],
        "infoURL":"http://www.spacex.com/falcon9"
     },
     "missions":[
        {
           "name":"BulgariaSat-1"
        }
     ]
  }
   ],
   "count":1
}

我用来获取JSON的jQuery是:

$.getJSON('https://launchlibrary.net/1.2/launch/next/1', function(data) {
  data.launches.forEach(function(d) {
    $('#launch-main-name').append('<p class="rocket-main-data">' + d.name + '</p>');
    $('#launch-main-date').append('<p class="rocket-main-data">' + d.net + '</p>');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="launch-main-name"></p>
<p id="launch-main-date"></p>

我遇到的问题是我无法从“launch”数组中的grand-child元素中获取任何数据:例如“location” - &gt; “垫” - &gt; “名称”。但我能够获得“启动”数组中的“名称”和“网络”数据。

我已尝试过在本网站上找到的一些答案,但这些答案都没有奏效。

TL; DR 如何让我的getJSON目标成为数组中的grand-child元素?

3 个答案:

答案 0 :(得分:1)

这是一个小提琴:https://jsfiddle.net/5kknehw7/

Pads也是一个数组,所以也必须遍历这个。

data.launches.forEach(function(d) {
  console.log(d.name);
  console.log(d.net);

  d.location.pads.forEach(function(p) {
    console.log(p.name);
  });
});

答案 1 :(得分:0)

你可以用同样的方式访问孙子,即。 d.location.pads[0].name

你必须看看它是一个数组还是一个对象。基本上,完整的路径是:

var jString = { // your object }
jString.launches[0].location.pads[0].name

答案 2 :(得分:0)

&#13;
&#13;
$.getJSON('https://launchlibrary.net/1.2/launch/next/1', function(data) {
  data.launches.forEach(function(d) {
    $('#launch-main-name').append('<p class="rocket-main-data">' + d.name + '</p>');
    $('#launch-main-date').append('<p class="rocket-main-data">' + d.net + '</p>');
    d.location.pads.forEach(function(l){
      $('#launch-main-name').append('<p class="rocket-main-data">' + l.name + '</p>');
      l.agencies.forEach(function(a){
      $('#launch-main-name').append('<p class="rocket-main-data">' + a.name + '</p>');
      });
    });
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="launch-main-name"></p>
<p id="launch-main-date"></p>
&#13;
&#13;
&#13;