【发布时间】:2019-04-07 07:32:34
【问题描述】:
我正在构建一个自动完成功能。
1) 后端 RESTful 服务对部分输入的关键字返回以下响应。
JSON 响应
{
"suggest": {
"resultsuggest": [
{
"text": "Ke",
"offset": 0,
"length": 2,
"options": [
{
"text": "Kevin Johnson",
"_index": "customernames",
"_type": "_doc",
"_id": "1",
"_score": 3
}]
}
]
}
}
2) 在 Angular 应用程序中,我应该怎么做才能从 JSON 响应中提取选项数组并将其返回给这个 fetch 函数? 注意 - 我想使用 Promise 而不是 Observable。
fetch(params?: HttpParams): Promise<any> {
const query = params.get('query');
const headers = new HttpHeaders().set("Content-Type", "application/json");
let postData = "{ \"_source\": \"suggest\", \"suggest\": {\"resultsuggest\" : { \"prefix\" : \""+query+"\",\"completion\" : { \"field\" : \"suggest\", \"size\" : 5 }}}}";
return this._http.post<any[]>('http://127.0.0.1:9200/customernames/_search?pretty',postData, {headers})
.pipe(map(result=> {
// what should I do to extract the Options array from the JSON response and return it back in this fetch function??
return ????;
}),
delay(400)
).toPromise();
}
感谢您的帮助!
谢谢!
更新:
1) JSON 响应是固定的。
2) 改回this._http.post<any> to return this._http.post<any[]>
【问题讨论】:
-
请提供正确的 JSON。给定一个有错误。
-
如果我的理解是正确的,这将起作用
return JSON.parse(result).suggest.resultsuggest[0].options -
无需 AContent-Type 标头:HttpClient 自动添加。不需要 JSON.parse():HttpClient 会自动解析。无需发送 JSON 字符串:发送一个 JavaScript 对象,HttpCLient 自动发送为 JSON。阅读 HttpCLient 指南。这一切都得到了解释和记录。
-
谢谢!这解决了这个问题。 map(result=> { return result.suggest.resultsuggest[0].options; }
标签: json angular typescript promise angular-httpclient