2016-05-13 63 views
2

我觉得我有一个非常简单的问题,但我只是没有得到答案...... 我解析响应的.text()从我的使用JSON服务器。解析为JSON。 实际上我可以访问JSON的值:this.temp[0].name。 现在我只想遍历该JSON并将值推入字符串数组。但我怎么能做到这一点?转换JSON为一个字符串数组中的打字稿

当我尝试使用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

如果响应是包括你什么那么它很简单:

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

A是你的身体是该接口的对象的数组:

interface ObjectInResponseArray { 
    name: string; 
} 
0

我会尝试像

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") 
) 

我希望这有助于

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 
相关问题