如何在Angular中返回JSON响应的单个属性?

时间:2019-06-26 12:23:25

标签: angular

我有多个HTTP请求来获取数据。以前,我得到的JSON响应如下所示:

[{"date":"25-04-2019 11:11:23","action":"Created Request","userName":"chaitanya"},{"date":"25-04-2019 11:13:18","action":"Edited Request","userName":"chaitanya"}]

现在JSON响应如下所示:

{
    "status": "SUCCESS",
    "data": "[{\"date\":\"04-06-2019 05:51:33\",\"action\":\"Created Request\",\"userName\":\"David Katz\"},{\"date\":\"04-06-2019 05:53:43\",\"action\":\"Edited Request\",]",
    "errorMsg": null
}

基本上,先前的响应现在已成为新JSON中“数据”的一部分。

我以前的return语句看起来像这样:

return this.http.post('https://abc.xzu/fetchData', details)

如何在新的JSON中返回“数据”的值?如何访问?

此外,我还有其他一些使用订阅或toPromise的服务。对他们来说会有什么改变?基本上,我不知道如何访问新JSON中的“数据”值。

4 个答案:

答案 0 :(得分:3)

您可以使用以下方法访问数据:    

 .subscribe( (result: any) => {
        this.data = result.data
    });

答案 1 :(得分:1)

您可以按照Ronald Haan所述进行操作(这意味着修改您的订阅)或类似的操作

yourMethod() {
  return this.http.post('https://abc.xzu/fetchData', details)
    .pipe(
      tap(res => handleStatus(res)), // Handle errors without modifying the data
      mergeMap(res => res.data),
      mergeMap(data => JSON.parse(data)) // If you need to parse the JSON string
  );
}

handleStatus(res: {status: string, data: string, errorMsg: string | null}) {
  // Do something with 'status' and 'errorMsg'
}

通过这种方式,您可以处理新字段,而无需更改订阅。

答案 2 :(得分:0)

您通过API返回的回复中有没有?就像是: Response.Status .....

这可能是问题所在。

或尝试添加详细信息.toString或.Stringefy

答案 3 :(得分:0)

url = "api/uddl/zxcc";

    getDataWithObservable(): Observable<CLASS[]> {
        return this.http.get(this.url)
           .map(this.extractData)
           .catch(this.handleErrorObservable);
    }