2016-05-13 21 views
2

私はかなり簡単な質問があるように感じますが、私はちょうど答えに至りません... JSONで私のサーバからの応答の.text()を解析します。 JSONへの.parse そして私は実際にそのJSONの値にthis.temp[0].nameでアクセスできます。 これでJSONを繰り返し処理し、値を文字列配列にプッシュします。しかし、どうすればこれを達成できますか?JSONをtypescriptの文字列配列に変換します

for...ofを使用しようとすると、コンパイラは文字列または配列を要求しますが、JSONは必要としません。私がfor...inを使用しようとすると、実際にはループに入りません。ここで

は、私は罰金それにアクセスすることができますいくつかのコードです:

 this._pS.getAllProjects() 
     .subscribe(data => this.temp = JSON.parse(data.text()), 
      err => console.log(err), 
      () => console.log("hello " + this.temp[0].name + this.temp[1].name)); 

私はちょうど(.stringify後にそれをプリントアウトする場合):

 this._pS.getAllProjects() 
     .subscribe(data => this.temp = JSON.stringify(data), 
      err => console.log(err), 
      () => console.log("hello " + this.temp)); 

私は、ブラウザのコンソールでこれを取得する:

{"_body":"[{\"name\":\"Projekt A\"},{\"name\":\"Projekt XYZ\"}]", 
"status":200, 
"ok":true, 
"statusText":"Ok", 
"headers":{"Content-Type":["application/json; charset=utf-8"]}, 
"type":2, 
"url":"http://127.0.0.1:3000/api/getAllProjectNames"} 

tl; dr:ボディのテキスト部分の値を文字列配列に取得するにはどうすればよいですか?事前に

おかげ

答えて

6

を役に立てば幸い

this._pS.getAllProjects() 
     .subscribe(resp => { 
       this.temp = resp.json(); 
       console.log("hello " + this.temp[0].name + this.temp[1].name); 
      }, 
      err => console.log(err), 
      () => console.log("getAllProjectsDone") 
) 

のようなもの:

JSON.parse(data.text()).forEach(item => { 
    console.log(item.name); 
}); 

Aあなたの体は、このインターフェースのオブジェクトの配列ですね:

interface ObjectInResponseArray { 
    name: string; 
} 
0

私がしようとするだろう、私は応答はあなたが含まれ、それは簡単です何であるならば、これは

0

使用map

this._pS.getAllProjects() 
     .map(resp => resp.json()) 
     .map(json => json.map(project => project.name)).subscribe(...); 
0

まず第一に、あなたはJSONオブジェクトとを混合しています。 JSONはデータを転送するためのテキスト形式です。解析すると(JSON.parse)、JSONの内容に応じてオブジェクトまたは配列が取得されます。

var json = "{\"key\": \"value\" }"; 
var object = JSON.parse(json); 
json = "[1, 2, \"three\"]"; 
var array = JSON.parse(json); 

次に、既にオブジェクトがあるようです。 JSON.stringifyを実行すると、オブジェクトを文字列に変換します。したがって、dataオブジェクトに直接アクセスできます。一方的に変換する必要はありません。

console.log(data._body[0]); 

for loopsをよく知っていますか?それらは、JavaScript(そしてほとんどの言語、実際は)で配列を反復する最も一般的な方法です。たとえば、次のようにすべてのことを考えると

var objs = [ 
    { 
    name: 'Bugs' 
    }, 
    { 
    name: 'Bunny' 
    } 
]; 
for (var i = 0; i < objs.length; i++) { 
    var obj = objs[i]; 
    console.log(obj.name); 
} 

、あなたのdata._body配列を反復処理し、各要素に対してnameプロパティにアクセスすることができるはずです。

あなたの質問は少し不明なので、解析された内容のうち、data.text()を反復処理する必要があります。

var objs = JSON.parse(data.text()); 
// Use a simple loop like above 
関連する問題