如何从Angular中的HTTP请求返回JSON响应的特定属性?

时间:2019-06-26 10:42:20

标签: angular

我有一个HTTP请求来获取表的详细信息。之前,响应是一个看起来像这样的JSON:

{"TotalRejectedRequests":0,"TotalDrafts":41,"RequestsPendingApproval":6,"TotalApprovedRequests":13}

对于这种类型的响应,我正在返回如下数据:

return this.http.post<Snapshot>('https://xyz.abc/fetchData', details);

其中Snapshot是响应映射到的接口的名称。

现在我从HTTP请求获得的响应已更改为:

{
    "status": "SUCCESS",
    "data": {
        "TotalRejectedRequests": 0,
        "TotalDrafts": 2,
        "RequestsPendingApproval": 0,
        "TotalApprovedRequests": 1
    },
    "errorMsg": null
}

现在如何在映射到我已有的Snapshot接口的此响应JSON中仅返回“数据”的值?

编辑:Igor的答案解决了上一个问题,但是我现在有2个不同的问题。  1.如果我没有将响应映射到的界面怎么办?我还有另一个服务,我只是返回整个JSON而没有将其映射到接口?现在,我只想返回上面显示的JSON的数据值?我该怎么办?

  1. 如果我使用的是subscription或toPromise,这会引起任何问题还是有其他解决方法?

2 个答案:

答案 0 :(得分:1)

使用地图将map的数据发送到预期的响应。

return this.http.post<{data: Snapshot}>('https://xyz.abc/fetchData', details)
   .pipe(map(_ => _.data));

别忘了导入map

import {map} from 'rxjs/operators';

答案 1 :(得分:1)

使用rxjs映射运算符解包数据

import { map } from 'rxjs/operators';
...
return this.http.post<Snapshot>('https://xyz.abc/fetchData', details).pipe(
  map(({ data }) => data)
);

您还可以使用rxjs运算符做更多的事情,看看他们的documentation