我该如何调用此JSON数据?

时间:2016-09-25 21:10:03

标签: javascript html angularjs json

使用足球api建立一个Angular应用程序,数据加载很好,但我不确定如何打电话给家庭计分者而不是所有得分手。

例如,在下面的JSON数据中,它有'events'对象,里面有一个'player'属性,显示得分手。

但我想分别指定家庭和访客记分员。

我该怎么做? :)

由于

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>angular</title>
</head>
<body ng-app="myApp">
    <div ng-controller="MainController">
        <ul ng-repeat="score in scores">
            <li>{{ score.localteam_name}}</li>
            <li>{{ score.localteam_score}}</li>
            <li>{{ score.visitorteam_name}}</li>
            <li>{{ score.visitorteam_score}}</li>
            <li>{{ score.status}}</li>
            <li ng-repeat="scorer in score.events">{{ scorer.player }}</li>

        </ul>
    </div>
<script src="https://code.jquery.com/jquery-3.1.0.slim.min.js" integrity="sha256-cRpWjoSOw5KcyIOaZNo4i6fZ9tKPhYYb6i5T9RSVJG8="   crossorigin="anonymous"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>

<!-- App -->
<script type="text/javascript" src="js/app.js"></script>

<!-- Controller -->
<script type="text/javascript" src="js/controller/maincontroller.js"></script>

</body>
</html>

JSON数据

[
  {
    "id": "1921980",
    "comp_id": "1204",
    "formatted_date": "03.01.2016",
    "season": "2015/2016",
    "week": "20",
    "venue": "Selhurst Park (London)",
    "venue_id": "1265",
    "venue_city": "London",
    "status": "FT",
    "timer": "string",
    "time": "13:30",
    "localteam_id": "9127",
    "localteam_name": "Crystal Palace",
    "localteam_score": "0",
    "visitorteam_id": "9092",
    "visitorteam_name": "Chelsea",
    "visitorteam_score": "3",
    "ht_score": "[0-1]",
    "ft_score": "[0-3]",
    "et_score": "string",
    "penalty_local": "string",
    "penalty_visitor": "string",
    "events": [
      {
        "id": "21583632",
        "type": "goal",
        "minute": "29",
        "extra_min": 0,
        "team": "visitorteam",
        "player": "Oscar",
        "player_id": "57860",
        "assist": "D. Costa",
        "assist_id": "60977",
        "result": "[0-1]"
      }
    ]
  }
]

2 个答案:

答案 0 :(得分:2)

有时在编程中,某段代码没有神奇的解决方案,你必须找到正确的方法来自己完成。如果事件数组将容纳10-20个对象,那么我强烈建议你保持原样并加载所有得分手。如果它将被填充到o(n)并且您无法控制添加的事件数量(例如1000),那么有两个选项:

  1. 如果您从api加载json或从某个数据库接收它,那么您无法在不迭代事件的情况下更改它。这意味着如果你想遍历事件数组,你会传递每一个,检查它是家乡还是访问者,并构建两个新的事件数组,homeEvents和visitorEvents。然后用两者替换原始事件变量,您就可以完全控制选择家庭或访客事件。
  2. 如果您自己构建json,那么使用homeEvents和visitorEvents而不是您想要使用的事件变量来构建它。
  3. 两个选项基本上都给你相同的解决方案,当你收到json时,数字1代表,而当你自己构建json时,数字2代表。

    请注意这是一个通用的解决方案,如果您是angularjs的新手,需要帮助,请在评论中告诉我,我会在代码中附上一个片段(如果是1或2,请告诉我)。祝你好运!

答案 1 :(得分:1)

你可以将它们分成两个这样的数组

var i, item, j, k, len, len1, ref, ref1, rows;

ref = $scope.scores;
for (i = j = 0, len = ref.length; j < len; i = ++j) {
  rows = ref[i];
  rows.homeEvents = [];
  rows.visitorEvents = [];
  ref1 = rows.events;
  for (i = k = 0, len1 = ref1.length; k < len1; i = ++k) {
    item = ref1[i];
    if (item.team === 'visitorteam') {
      rows.visitorEvents.push(item);
    } else if (item.team === 'hometeam') {
      rows.homeEvents.push(item);
    }
  }
}

然后在您的HTML中,您可以使用ng-repeat

显示
<li ng-repeat="scorer in score.visitorEvents">{{ scorer.player }}</li>
<li ng-repeat="scorer in score.homeEvents">{{ scorer.player }}</li>