2017-07-05 22 views
-1

私はJSONファイルからhttp経由で特定のデータを取得しようとしています。 JSONは次のようになります。)(HTTP経由で取得したJSONオブジェクトをループする方法角型2/Typescript

this._postService.getParams(_url).subscribe(
    data => { 
    this.results = data.Results 
    }, 
    error => console.log(error), 
() => console.log('Done') 
); 

のgetParamsこの

getParams(url: string) { 
    return this._http.get(url) 
     .map(res => res.json()); 
} 
のようなデータをフェッチ:私はこの取得したオブジェクトをループにしようとしている

[{"name":"Name1","perc":33},{"name":"Name2","perc":22},{"name":"Name3","perc":41}] 

を、私はそうのようにそれを取得しています

取得したデータのインターフェイスを作成し、サービスが呼び出されている同じ.component.tsファイルに配置しました

/*Interface for Stats */ 
interface stats { 
name: string; 
percent: number; 
} 

私が取り出したオブジェクトをループし、それらをローカル配列に格納し、それをループして表示する予定です。コンポーネントファイル内のJSONオブジェクトをどのように反復処理できますか?私は多くの異なるループを試してみて、それらはすべて失敗しました。

私はこの1つを試みたし、それが失敗した、Iコンソールは、私が受け取った3つのオブジェクトを記録しているため、JSONはtypescriptです

let list: string[] = []; 
json.Results.forEach(element => { 
list.push(element.Id); 
}); 

によって認識されていなかった私は、データを取得するために完璧にできますよ。

+0

エラーは何ですか? jsonの応答は 'console.log(data)'または 'console.log(data.results)'の2行目の結果に記載されていますか? –

+0

また、どこにでも 'json'を記述したコードは表示されません。 'this.results'の代わりにキーワードを使用していますか? –

+0

エラーは単にtsです:jsonを見つけることができません –

答えて

0

クラスの統計:

export class Stats { 
    name: string; 
    perc: string; 
    constructor(n, p) { 
     this.name = n; 
     this.perc = p; 
    } 
} 

はそれを変更しないでください、あなたのサービスの作品とリターンのデータを仮定。

はコンポーネント:あなたが割り当てられ

getStats(_url: string) { 
    let list: Stats[] = []; 
    this._postService.getParams(_url).subscribe(
     data => { 
      for (let res of data.Results) { 
       let stat = new Stats(res.name, res.perc); 
       list.push(stat); 
      } 
     }, err => { /* Error handling */} 
    ); 
} 
+0

このクラスのインスタンスを作成する必要があるため、インターフェイスではできません。インタフェースをそのインタフェースに置き換えることもできますし、そうであればそれをあなたが選んだファイルに入れることもできます。コンポーネントと同じファイルにない場合は、インポートすることを忘れないでください! – trichetriche

+0

うん、今試してみた。 –

+0

あなたのソリューションをテストしましたが、エラーが発生しました: TypeError:未定義のプロパティ 'length'を読み取ることができません –

0

はthis.results

this.results = data.Results 

上のデータを受信したが、その後this.results

0

あなたがすべきでjson.Resultsを交換しjson.Results

を通過しようとしています単にあなたの配列にデータをキャストすることができる:このコードでは次に

getParams(url: string) { 
    return this._http.get(url) 
    .map(res => <stats[]> res.json()); 
} 

this._postService.getParams(_url).subscribe(
    data => { 
    this.results = data.Results 
    }, 
    error => console.log(error), 
() => console.log('Done') 
); 

this.resultsは、統計情報のあなたの配列でなければなりません。

関連する問題