2017-06-22 80 views
0

我正在从API获取数据。从API的格式如下:
getJSON无法获取子值

{ 
 
    "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 
 
}

jQuery的我用得到检索JSON是:

$.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”数组中的d元素:例如“location” - >“pads” - >“name”。但是我能够获得,例如“启动”数组中的“名称”和“网络”数据。

我尝试了一些我在这个网站上找到的答案,但他们都没有工作。

TL; DR你如何使我的getJSON目标在数组中的宏 - 子元素?

+2

'd.locations.pads',如'pads'是你要遍历一个数组。像'd.locations.pads [0] .name' – Satpal

+1

您还没有给我们一个例子,说明您目前正在试图访问孙元素 – hairmot

+0

@Satpal:小错字:它是位置,而不是位置'。 – zuluk

回答

0

$.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>

0

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

您必须查看它是数组还是对象。基本上,完整的路径将是:

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

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

垫也是一个数组,所以不得不遍历这个。

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

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