Json在Angular2中解析

时间:2017-03-25 16:19:19

标签: arrays json angular

我有一系列jsons,我想解析我的班级锦标赛。

班级锦标赛看起来像这样:

export class Tournament { constructor (public id: number,
           public name: string,
           public date: string,
           public pointsWin: string,
           public pointsDraw: string,
           public groupSize: string,
           public groupPhase: string,
           public system: string,
           public teams: Team[]
   ){ }
}

班级团队看起来像这样:

export class Team { constructor (public id: number,
           public name: string,
           public rank: number,
           public occupied: boolean,
           public group: string
){ }
}

我收到的JSON看起来像这样:

[{"id":1,
"name":"Schulcup1",
"date":
{"year":2017,"month":"MARCH","era":"CE","dayOfYear":83,"dayOfWeek":"FRIDAY","leapYear":false,"dayOfMonth":24,"monthValue":3,"chronology":{"calendarType":"iso8601","id":"ISO"}},
"pointsWin":0,
"pointsDraw":0,
"groupSize":0,
"groupPhase":null,
"system":null,
"teams":[
{"id":1,"name":"Team1","rank":8,"occupied":false,"group":"A"},
{"id":2,"name":"Team2","rank":1,"occupied":false,"group":"A"},
{"id":3,"name":"Team3","rank":4,"occupied":false,"group":"A"},
{"id":4,"name":"Team4","rank":16,"occupied":false,"group":"A"},
{"id":5,"name":"Team5","rank":2,"occupied":false,"group":"B"},
{"id":6,"name":"Team6","rank":16,"occupied":false,"group":"B"},
{"id":7,"name":"Team7","rank":8,"occupied":false,"group":"B"},
{"id":8,"name":"Team8","rank":4,"occupied":false,"group":"B"}],
"active":true},
{"id":2,
"name":"Schulcup2",
"date":
{"year":2017,"month":"MARCH","era":"CE","dayOfYear":82,"dayOfWeek":"THURSDAY","leapYear":false,"dayOfMonth":23,"monthValue":3,"chronology":{"calendarType":"iso8601","id":"ISO"}},
"pointsWin":0,
"pointsDraw":0,
"groupSize":0,
"groupPhase":null,
"system":null,
"teams":[
{"id":48,"name":"Team1","rank":16,"occupied":false,"group":"A"},
{"id":49,"name":"Team2","rank":2,"occupied":false,"group":"A"},
{"id":50,"name":"Team3","rank":4,"occupied":false,"group":"A"},
{"id":51,"name":"Team4","rank":1,"occupied":false,"group":"A"},
{"id":52,"name":"Team5","rank":16,"occupied":false,"group":"B"},
{"id":53,"name":"Team6","rank":8,"occupied":false,"group":"B"},
{"id":54,"name":"Team7","rank":16,"occupied":false,"group":"B"},
{"id":55,"name":"Team8","rank":16,"occupied":false,"group":"B"}],
"active":true}]

如果我尝试使用JSON.parse()解析JSON,我会收到一个错误,即位置0的JSON中存在意外令牌,因为它是[,因为它是一个JSON数组但是如何我可以迭代它吗?

还有我如何迭代JSON中的团队来创建一组团队?

2 个答案:

答案 0 :(得分:1)

它已经被解析了。只需将它用作对象!

答案 1 :(得分:0)

如果您确实没有 需要 类,则无需在此处使用类,只需将JSON转换为接口即可。转换为接口非常容易且无痛;)并且无需在此处使用JSON.parse

如果可以,请使用接口,这里是Tournament

export interface Tournament {
  public id: number,
  public name: string,
  public date: string,
  public pointsWin: string,
  public pointsDraw: string,
  public groupSize: string,
  public groupPhase: string,
  public system: string,
  public teams: Team[]
}

<强>服务

getTournaments(): Observable<Tournament[]> { 
  return this.http.get('src/data.json')
    .map(res => res.json() as Tournament[])
}

<强> TS:

tournaments: Tournament[] = [];

getTournaments() {
  this.service.getTournaments()
    .subscribe(data => {
      this.tournaments = data;
    })
}

DEMO