javascript - 深入了解 json 数据

标签 javascript jquery json api

我正在尝试 espn 公共(public) API,并尝试使用他们的 json 来访问 NFL 球员信息。

我成功访问的 json 看起来像:

{
"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/javascript:

$(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 一起使用。相比之下,ESPN json 稍微复杂一些。

感谢您为我提供的任何信息。

最佳答案

sports、 leagues 和运动员都是数组,例如: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>" );
        });
    });
});

关于javascript - 深入了解 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14197262/

相关文章:

javascript - C3js行数据,自定义颜色

jquery - Border-Spacing 和 Border-Collapse 不起作用

javascript - 使用 iText 在 pdf 的特定位置标记

javascript - $.ajax 显示 "�"而不是重音符号,例如 "é"或 "ã"

php - jcarousel 不滚动图像

javascript - 无限跑马灯响应无间隙

json - 如何将 JSON 从 GCE 容器 VM 记录到 Stackdriver?

c# - ASP.NET 通过 WebMethod 返回 JSON 对象

c# - 如何将要在某些 XElement 上执行的操作作为参数传递?

Javascript正则表达式将字符串拆分为分组/连续字符数组