2017-11-01 10 views
2

私はこのスペースが比較的新しいので、間違った用語を使用している場合は謝ります。ご清聴をお願いします。 (多少)外部サービスを呼び出すときTypeScript - JSON配列をカスタムオブジェクトの配列にパースする方法

export interface Item { 
    id: string 
    type: string 
    state: string 
} 

export interface ItemResponse { 
    someData1: string 
    someData2: string 
    itemListResponse: Array<Item> // in reality just a JSON string containing serialized Items in an Array 
} 

ItemResponseが移入され、正しく:

結果はItemResponsesのある

私はいくつかのtypescriptですインターフェースを有しています。今のところ、ItemResponse配列のサイズは1ですが、itemListResponse配列には複数のItemがあるとします。

"[{"id":"blah", "type":"blah", ...}, {"id":"blah2",.... },...]" 

私が項目の配列にこれを変換する方法を:

itemListResponseは、実際にはJSON文字列のですか?

私はJSONから単一のオブジェクトへの解析に精通していると思いますが、配列でこれを行う方法ではありません。

+1

**タイトルを意味のあるものにすることから始めることができますが、 'JSON.parse'がJSONを解析したい場合があります –

+0

[コンマで配列をコンバートする](https://stackoverflow.com/questions)の可能な複製/ 13272406/convert-string-comm-to-array) – Manish

+1

@Manishは重複していません。 –

答えて

2

@ジャロマンダXは正しいです - あなたはJSON.parseをお探しですか?このようなもので十分でしょう:

responseArray = "[{"id":"blah", "type":"blah", ...}, {"id":"blah2",.... },...]" 
<Item[]> JSON.parse(responseArray) 

明らかに、これは(悪い習慣である)応答の検証はありません。あなたは、理想的にはより多くの結果のいくつかの強烈な検証すべきである:

responseArray = "[{"id":"blah", "type":"blah", ...}, {"id":"blah2",.... },...]" 

var result; 
try { 
    itemListResponse = <Item[]>JSON.parse(responseArray); 

    if(!itemListResponse.has("id") || 
     !itemListResponse.has("type") || 
     !itemListResponse.has("state")){ 

     throw "Invalid Item"; 
    } 
} catch (e){ 

} 

または、代わりに、ajvのようなJSON Schemaのバリデータを使用しています。

関連する問題