在嵌套的Json对象中深入获取数据

时间:2016-11-21 06:37:22

标签: javascript angularjs arrays json

我有嵌套JSON对象形式的数据。我想抓取一些数据来创建一个表,但它深深地嵌套在数组和对象中。我的餐桌最好的办法是什么?

如果我想抓住球队的名字,华盛顿国民队和迈阿密马林鱼队,我该如何引用这些属性?我正在使用Angular 1和ng repeat来迭代。

这是一个更长的json对象的第一部分的例子:

CMTime fragmentInterval = kCMTimeInvalid;
[aMovieFileOutput setMovieFragmentInterval:fragmentInterval];
[aMovieFileOutput startRecordingToOutputFileURL:[NSURL fileURLWithPath:       [tempFileName stringByAppendingPathExtension:@"mov"]] recordingDelegate:self];
谢谢你!

1 个答案:

答案 0 :(得分:0)

使用Array map()功能:

var res = obj.sports[0].leagues[0].events[0].competitions[0].competitors.map(function(item) {
  return item.team.location+ " " +item.team.name;
});

console.log(res);

使用for in循环:

var resArray = [];
for (var i in obj.sports[0].leagues[0].events[0].competitions[0].competitors) {          
  resArray.push(obj.sports[0].leagues[0].events[0].competitions[0].competitors[i].team.location+ " " +obj.sports[0].leagues[0].events[0].competitions[0].competitors[i].team.name);
}

console.log(resArray);

工作演示:



var obj = {
  "sports": [
    {
      "name": "baseball",
      "id": 1,
      "uid": "s:1",
      "leagues": [
        {
          "name": "Major League Baseball",
          "abbreviation": "mlb",
          "id": 10,
          "uid": "s:1~l:10",
          "groupId": 9,
          "shortName": "MLB",
          "events": [
            {
              "id": 350506120,
              "uid": "s:1~l:10~e:350506120",
              "date": "2015-05-06T17:05:00Z",
              "season": {
                "year": 2015,
                "type": 2,
                "description": "regular",
                "startDate": "2015-04-05T07:00:00Z",
                "endDate": "2015-10-05T06:59:59Z"
              },
              "timeValid": true,
              "competitions": [
                {
                  "id": 350506120,
                  "uid": "s:1~l:10~c:350506120",
                  "date": "2015-05-06T17:05:00Z",
                  "timeValid": true,
                  "competitors": [
                    {
                      "type": "team",
                      "score": 7,
                      "homeAway": "home",
                      "isWinner": true,
                      "team": {
                        "id": 20,
                        "uid": "s:1~l:10~t:20",
                        "location": "Washington",
                        "name": "Nationals",
                        "nickname": "Washington",
                        "abbreviation": "WSH",
                        "color": "0a295d",
                        "links": {
                          "api": {
                            "teams": {
                              "href": "http://api-partners.espn.com/v1/sports/baseball/mlb/teams/20"
                            }
                          }
                        },
                        "record": {
                          "summary": "14-15",
                          "wins": 14,
                          "losses": 15,
                          "overtimeLosses": 1,
                          "ties": 0
                        }
                      }
                    },
                    {
                      "type": "team",
                      "score": 5,
                      "homeAway": "away",
                      "isWinner": false,
                      "team": {
                        "id": 28,
                        "uid": "s:1~l:10~t:28",
                        "location": "Miami",
                        "name": "Marlins",
                        "nickname": "Miami",
                        "abbreviation": "MIA",
                        "color": "0081c7",
                        "links": {
                          "api": {
                            "teams": {
                              "href": "http://api-partners.espn.com/v1/sports/baseball/mlb/teams/28"
                            }
                          }
                        }
                      }
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ]
};

var resArray = [];
for (var i in obj.sports[0].leagues[0].events[0].competitions[0].competitors) {          
  resArray.push(obj.sports[0].leagues[0].events[0].competitions[0].competitors[i].team.location+ " " +obj.sports[0].leagues[0].events[0].competitions[0].competitors[i].team.name);
}

console.log(resArray);