2

espn public APIを試し、jsonを使用してNFLプレーヤー情報にアクセスしようとしています。

アクセスに成功したjsonimは次のようになります。

{
"sports": [
    {
        "name": "football",
        "id": 20,
        "leagues": [
            {
                "name": "National Football League",
                "abbreviation": "nfl",
                "id": 28,
                "groupId": 9,
                "shortName": "NFL",
                "athletes": [
                    {
                        "id": 14466,
                        "firstName": "Isa",
                        "lastName": "Abdul-Quddus",
                        "fullName": "Isa Abdul-Quddus",
                        "displayName": "Isa Abdul-Quddus",
                        "shortName": "I. Abdul-Quddus",
                        "links": {
                            "api": {
                                "athletes": {
                                    "href": "http://api.espn.com/v1/sports/football/nfl/athletes/14466"
                                },
                                "news": {
                                    "href": "http://api.espn.com/v1/sports/football/nfl/athletes/14466/news"
                                },
                                "notes": {
                                    "href": "http://api.espn.com/v1/sports/football/nfl/athletes/14466/news/notes"
                                }
                            },
                            "web": {
                                "athletes": {
                                    "href": "http://espn.go.com/nfl/player/_/id/14466/isa-abdul-quddus?ex_cid=espnapi_public"
                                }
                            },
                            "mobile": {
                                "athletes": {
                                    "href": "http://m.espn.go.com/nfl/playercard?playerId=14466&ex_cid=espnapi_public"
                                }
                            }
                        }
                    },
                    {
                        "id": 8645,
                        "firstName": "Hamza",
                        "lastName": "Abdullah",
                        "fullName": "Hamza Abdullah",
                        "displayName": "Hamza Abdullah",
                        "shortName": "H. Abdullah",
                        "links": {
                            "api": {
                                "athletes": {
                                    "href": "http://api.espn.com/v1/sports/football/nfl/athletes/8645"
                                },
                                "news": {
                                    "href": "http://api.espn.com/v1/sports/football/nfl/athletes/8645/news"
                                },
                                "notes": {
                                    "href": "http://api.espn.com/v1/sports/football/nfl/athletes/8645/news/notes"
                                }
                            },
                            "web": {
                                "athletes": {
                                    "href": "http://espn.go.com/nfl/player/_/id/8645/hamza-abdullah?ex_cid=espnapi_public"
                                }
                            },
                            "mobile": {
                                "athletes": {
                                    "href": "http://m.espn.go.com/nfl/playercard?playerId=8645&ex_cid=espnapi_public"
                                }
                            }
                        }
                    },
                    {
                        "id": 11910,
                        "firstName": "Husain",
                        "lastName": "Abdullah",
                        "fullName": "Husain Abdullah",
                        "displayName": "Husain Abdullah",
                        "shortName": "H. Abdullah",
                        "links": {
                            "api": {
                                "athletes": {
                                    "href": "http://api.espn.com/v1/sports/football/nfl/athletes/11910"
                                },
                                "news": {
                                    "href": "http://api.espn.com/v1/sports/football/nfl/athletes/11910/news"
                                },
                                "notes": {
                                    "href": "http://api.espn.com/v1/sports/football/nfl/athletes/11910/news/notes"
                                }
                            } ........
                ]
            }
        ]
    }
],
"resultsOffset": 0,
"resultsLimit": 50,
"resultsCount": 3301,
"timestamp": "2013-01-06T19:30:17Z",
"status": "success"

}

そしてここにhtml/javascriptImを使用しています:

$(document).ready(function(){

    $.getJSON("http://api.espn.com/v1/sports/football/nfl/athletes?apikey=MY-API-KEY-HERE&_accept=application/json",
    function(data){
      $.each(data["sports"], function(i,item){
         $("#infoDiv").append( [i] + " - " + item.name + "<br>" );    
      });
    });

});

これで0を表示できます-サッカーですが、次のようなものは使用できません

$.each(data["sports"]["leagues"]["athletes"], function(i,item){
  $("#infoDiv").append( [i] + " - " + item.firstName + "<br>" );  

item.firstNameなどの個々のアスリートデータにアクセスします。

次のエラーが発生し続けます:

TypeError: data.sports.leagues is undefined

私は何が欠けていますか?私はこれと同じコード構造を、jsonを提供する他のいくつかのAPIで正常に使用しています。ただし、ESPNjsonは比較すると少し複雑です。

あなたが私のためにこれに当てることができるどんな光にも感謝します。

4

2 に答える 2

3

スポーツ、リーグ、アスリートは配列です。たとえば、sports [0]はオブジェクトです(name ='football'のオブジェクト)。次のようにそれぞれを繰り返す必要があります(テストされていません)。

$.each(data.sports, function(i,sport) {
    $.each(sport.leagues, function(i,league) {
        $.each(league.athletes, function(i,athlete) {
            $("#infoDiv").append( [i] + " - " + athlete.firstName + "<br>" );
        });
    });
});
于 2013-01-07T13:57:31.740 に答える
1

sportsleaguesおよびathletesは、反復する必要のある配列です。

for (var i=0; i<data.sports.length; i++) {
     var sport = data.sports[i];
     $("#infoDiv").append( [i] + " - " + sport.name + "<br>" );
     for (var j=0; j<sport.leagues.length; j++) {
          var league = sport.leagues[j];
          $("#infoDiv").append( [i,j] + " - " + league.name + "<br>" );
          for (var k=0; k<league.athletes.length; k++) {
               var athlete = league.athletes[k];
               $("#infoDiv").append( [i,j,k] + " - " + athlete.fullName + "<br>" );
          }
     }
}
于 2013-01-07T14:22:52.267 に答える