2017-04-05 15 views
1

作成したモデルに受信したJSONデータをマップしようとしています。問題は、JSONデータにネストされた配列があることです。だから私のやり方でデータをマッピングすることはできません。自分のやり方で間違いがあるのですか、それともJSONデータをマッピングする良い方法がありますか?ネストしたJSON配列をモデルに変換するAngular2

JSON-データ

{ 
"data": { 
    "apiName": "test-application", 
    "stages": [ 
     { 
      "stage": "prod", 
      "id": "xxxxxxxx", 
      "methods": [ 
       { 
        "id": "xxxxxx", 
        "path": "https://stackoverflow.com/users/create", 
        "httpMethods": [ 
         "GET" 
        ], 
        "methodName": "testMethod", 
        "url": "https://xxxx/xxxxx/xxxxxx" 
       } 
      ] 
     }, 
     { 
      "stage": "dev", 
      "id": "xxxxxxx", 
      "methods": [ 
       { 
        "id": "xxxxxxx", 
        "path": "https://stackoverflow.com/users/create", 
        "httpMethods": [ 
         "GET" 
        ], 
        "methodName": "testMethod", 
        "url": "https://xxxxx/xxxxxx/xxxx" 
       } 
      ] 
     } 
    ] 
} 
} 

モデル:サービスで

import {ApiStage} from "./ApiStage"; 
export class Api { 
    constructor(values: Object = {}){ 
    Object.assign(this, values); 
    } 
    public apiName: string; 
    public stages: ApiStage[]; 
} 

import {ApiMethod} from "./ApiMethod"; 
export class ApiStage { 
    constructor(values: Object = {}){ 
    Object.assign(this, values); 
    } 
    public stage: string; 
    public id: string; 
    public methods: ApiMethod[]; 
} 

export class ApiMethod { 
    constructor(values: Object = {}){ 
    Object.assign(this, values); 
    } 
    public id: string; 
    public path: string; 
    public httpMethods: string[]; 
    public methodName: string; 
    public url: string; 
} 

HTTP-方法:

getApi() { 
return this.http.post(this.url, this.data, {headers: this.headers}) 
    .map(this.extractData) 
    .map(api => new Api(api)) 
    .catch((error: any) => Observable.of(error.json().error || 'Server error')); 
} 

private extractData(res: Response) { 
    let body = res.json(); 
    return body.data || {}; 
} 
+0

どのようにC#モデルを生成しましたか?あなたのjsonをここに貼り付けてコピーしてください:http://json2csharp.com/ –

+0

これはC#ではなく、タイプスクリプト – bobafett1

+0

私の間違いですが、私には間違って見えます。http:// json2ts.com/どのようなエラーがありましたか? –

答えて

1

JSONはちょうど非常に限られたデータ型のセットがある - 文字列を、数、ブール値、配列、オブジェクト。 JSONオブジェクトツリーをカスタムクラスのオブジェクトのツリーに変換する場合は、再帰的に、正しいオブジェクトを作成する必要があります。クラスのように見えるオブジェクトでは動作しません。

この処理は面倒でエラーが発生する可能性があるので、クラストランスフォーマ(https://github.com/pleerock/class-transformer)などのライブラリを使用するとよいでしょう。デコレータ(@Type(...)など)でクラスに注釈を付けた後、plainToClass()メソッドを使用してプレーンなJSONオブジェクトを変換するか、classToPlain()を使用してJSONに実際のオブジェクトをシリアル化します。

関連する問題