Javascript 访问嵌套JSON-Songkick API中的对象

Javascript 访问嵌套JSON-Songkick API中的对象,javascript,jquery,html,json,ajax,Javascript,Jquery,Html,Json,Ajax,我试图在Songkick的活动细节API的Performance部分下获取艺术家的URI和DisplayName 来自其站点的数据结构示例: { "resultsPage": { "results": { "event": [ { "id": 11129128, "type": "Concert",

我试图在Songkick的活动细节API的Performance部分下获取艺术家的URI和DisplayName

来自其站点的数据结构示例:

{
    "resultsPage": {
        "results": {
            "event": [
                {
                    "id": 11129128,
                    "type": "Concert",
                    "uri": "http://www.songkick.com/concerts/11129128-wild-flag-at-fillmore?utm_source=PARTNER_ID&utm_medium=partner",
                    "displayName": "Wild Flag at The Fillmore (April 18, 2012)",
                    "start": {
                        "time": "20:00:00",
                        "date": "2012-04-18",
                        "datetime": "2012-04-18T20:00:00-0800"
                    },
                    "performance": [
                        {
                            "artist": {
                                "uri": "http://www.songkick.com/artists/29835-wild-flag?utm_source=PARTNER_ID&utm_medium=partner",
                                "displayName": "Wild Flag",
                                "id": 29835,
                                "identifier": []
                            },
                            "displayName": "Wild Flag",
                            "billingIndex": 1,
                            "id": 21579303,
                            "billing": "headline"
                        }
                    ],
                    "location": {
                        "city": "San Francisco, CA, US",
                        "lng": -122.4333,
                        "lat": 37.78424
                    },
                    "venue": {
                        "id": 6239,
                        "displayName": "The Fillmore",
                        "uri": "http://www.songkick.com/venues/6239-fillmore?utm_source=PARTNER_ID&utm_medium=partner",
                        "lng": -122.4333,
                        "lat": 37.78424,
                        "metroArea": {
                            "uri": "http://www.songkick.com/metro_areas/26330-us-sf-bay-area?utm_source=PARTNER_ID&utm_medium=partner",
                            "displayName": "SF Bay Area",
                            "country": {
                                "displayName": "US"
                            },
                            "id": 26330,
                            "state": {
                                "displayName": "CA"
                            }
                        }
                    },
                    "status": "ok",
                    "popularity": 0.012763
                }
            ]
        },
        "totalEntries": 24,
        "perPage": 50,
        "page": 1,
        "status": "ok"
    }
}
我正在使用AJAX和jQuery。我可以成功访问场馆名称;但是,当尝试在性能数组中获取数据时,它会中断,并且不会返回任何结果

HTML:


身体{
填充顶部:60px;
填充底部:40px;
}
Mesh.fm
最好的方式找到新的音乐发生在你身边

听纽约 类型
    显示

      jQuery:

      $(document).ready(function() {
        $.ajax({
        url:  "http://api.songkick.com/api/3.0/metro_areas/7644/calendar.json?&apikey={your_api_key}&per_page=all&max_date=2013-06-30&jsoncallback=?",
        dataType:   "jsonp", 
        success:    function(data){ 
          $.each(data["resultsPage"]["results"]["event"], function(i, entry){
              $("#localshows").append('<li><a href="' + entry.uri+'">'+entry.venue.displayName+'</a></li>');
              $("#artistname").append('<li><a href="' + entry.uri+'">'+entry["performance"][0]["artist"]["displayName"]+'</a></li>');
            });
           }     
          });
        });
      
      $(文档).ready(函数(){
      $.ajax({
      url:“http://api.songkick.com/api/3.0/metro_areas/7644/calendar.json?&apikey={your_api_key}&per_page=all&max_date=2013-06-30&jsoncallback=?“,
      数据类型:“jsonp”,
      成功:函数(数据){
      $.each(数据[“结果页面”][“结果”][“事件”]),函数(i,条目){
      $(“#localshows”).append(“
    • ”); $(“#艺人名称”)。追加(“
    • ”); }); } }); });
      查看API的响应,并非所有事件在
      性能
      数组中都有
      艺术家
      属性,您只需使用以下内容检查性能数组的长度:

      $("#localshows").append('<li><a href="' + entry.uri + '">' + entry.venue.displayName + '</a></li>');
      if (entry.performance.length) {
          $("#artistname").append('<li><a href="' + entry.uri + '">' + entry["performance"][0]["artist"]["displayName"] + '</a></li>');
      }
      
      $(“#localshows”).append(“
    • ”); if(条目、性能、长度){ $(“#艺人名称”)。追加(“
    • ”); }

      如果你想用这种方式来构建HTML,这是另一个例子(虽然你应该考虑一个模板化的解决方案,比如敲除,或者把手,如果你经常这样做的话):

      $.each(data.resultsPage.results.event,函数(i,事件){
      var showsContainer=$(“#localshows”);
      var artistContainer=$(“#artistname”);
      var showListItem=$(“
    • ”); var showAnchor=$('').attr('href',event.uri).html(event.venture.displayName); showListItem.append(showAnchor); showsContainer.append(showListItem); if(event.performance.length){ 变量artistListItem=$(“
    • ”); var artistAnchor=$('').attr('href',event.uri).html(event.performance[0].artist.displayName); artistListItem.append(artistAnchor); artistContainer.append(artistListItem); } });

    • 注意:从先前的注释中删除api密钥,并在可能的情况下将其重置;)

      你的JS控制台是怎么说的?你实际上从API中得到了什么数据?它是否破坏了一切,使你根本得不到任何数据,或者你只是没有得到该特定字段的任何数据?我的JS控制台:Uncaught TypeError:无法读取未定义的main.JS:8(匿名函数)的属性“artist”main.js:8 b.extend.each jquery-1.9.1.min.js:3$.ajax.success main.js:6 c jquery-1.9.1.min.js:3 p.fireWith jquery-1.9.1.min.js:3 k jquery-1.9.1.min.js:5 n.onload.n.onreadystatechange jquery-1.9.1.min.js:5
      $("#localshows").append('<li><a href="' + entry.uri + '">' + entry.venue.displayName + '</a></li>');
      if (entry.performance.length) {
          $("#artistname").append('<li><a href="' + entry.uri + '">' + entry["performance"][0]["artist"]["displayName"] + '</a></li>');
      }
      
      $.each(data.resultsPage.results.event, function (i, event) {
          var showsContainer = $('#localshows');
          var artistContainer = $('#artistname');
      
          var showListItem = $('<li/>');
          var showAnchor = $('<a/>').attr('href', event.uri).html(event.venue.displayName);
          showListItem.append(showAnchor);
          showsContainer.append(showListItem);
      
          if (event.performance.length) {
              var artistListItem = $('<li/>');
              var artistAnchor = $('<a/>').attr('href', event.uri).html(event.performance[0].artist.displayName);
              artistListItem.append(artistAnchor);
              artistContainer.append(artistListItem);
          }
      });