我有多个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中的“数据”值。
答案 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);
}