【问题标题】:getJSON unable to get child valuegetJSON 无法获取子值
【发布时间】:2017-06-22 17:09:07
【问题描述】:

我正在从 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>

我遇到的问题是我无法从“launches”数组中的孙子元素获取任何数据:例如“location”->“pads”->“name”。但我能够从“launches”数组中获取例如“name”和“net”数据。

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

TL;DR如何让我的 getJSON 以数组中的孙元素为目标?

【问题讨论】:

  • d.locations.pads,因为pads 是一个数组,您必须对其进行迭代。喜欢d.locations.pads[0].name
  • 你也没有给我们一个例子来说明你当前是如何访问孙元素的
  • @Satpal:小错字:是location,而不是locations。

标签: javascript jquery html arrays json


【解决方案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);
  });
});

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-06
        相关资源
        最近更新 更多