Angular - HttpClient:将 Get 方法对象结果映射到数组属性 [英] Angular - HttpClient: Map Get method object result to array property
问题描述
我正在调用一个返回 JSON 对象的 API.我只需要将数组的值映射到 Observable .如果我调用只返回数组的 api,我的服务调用就可以工作.
I am calling an API that returns a JSON Object. I need just the value of the array to map to a Observable . If I call api that just returns the array my service call works.
下面是我的示例代码..
Below is my sample code ..
// my service call ..
import { Injectable } from '@angular/core';
import {Observable} from 'rxjs/Observable';
import {Show} from '../models/show';
import {HttpClient} from '@angular/common/http';
@Injectable()
export class MyService {
constructor(private http: HttpClient ) { }
findAllShows(): Observable<Show[]> {
return this.http
.get<Show[]>(`${someURL}/shows`)
}
}
如果返回的是一个 JSON 对象,例如下面这将失败..
If the return is a JSON Object such as below this fails..
// Service API that FAILS ...
{
"shows": [
{
"id": "123f9165-80a2-41d8-997a-aecc0bfb2e22",
"modified": "2017-08-13 15:54:47",
"name": "Main Show1"
},
{
"id": "456f9165-80a2-41d8-997a-aecc0bfb2e22",
"modified": "2017-08-14 15:54:47",
"name": "Main Show2"
},
{
"id": "789f9165-80a2-41d8-997a-aecc0bfb2e22",
"modified": "2017-08-17 15:54:47",
"name": "Main Show3"
}
]
}
现在如果我只返回数组,这个就可以了
Now this one works if I just return the Array
// Service API that Works ...
[
{
"id": "123f9165-80a2-41d8-997a-aecc0bfb2e22",
"modified": "2017-08-13 15:54:47",
"name": "Main Show1"
},
{
"id": "456f9165-80a2-41d8-997a-aecc0bfb2e22",
"modified": "2017-08-14 15:54:47",
"name": "Main Show2"
},
{
"id": "789f9165-80a2-41d8-997a-aecc0bfb2e22",
"modified": "2017-08-17 15:54:47",
"name": "Main Show3"
}
]
如何将 JSON 对象 Observable 映射到数组 Observable???
How do I map the JSON object Observable into an Array Observable???
推荐答案
你可以简单地 .map()
你的 http 调用,它是一个 Observable
,返回您想要的数据类型.
You can simply .map()
your http call, which is an Observable
, to return the data type that you want.
findAllShows(): Observable<Show[]> {
return this.http
.get(`${someURL}/shows`)
.map(result=>result.shows)
}
你的 httpClient.get()
应该返回一个 Observable
,你已经明确声明它认为 Observable
.你 .map()
是一个将可观察对象转换为新对象的操作符.
Your httpClient.get()
should return an Observable
, which you have explicitly stated it thought Observable<Show[]>
. You .map()
is an operator that transform the observable into a new one.
更多关于 .map()
运算符:http://reactivex.io/documentation/operators/map.html
对于 RXJS 版本 6 及更高版本,只需使用 .pipe()
来管道 .map()
运算符:
For RXJS version 6 and above, simply use .pipe()
to pipe the .map()
operator:
findAllShows(): Observable<Show[]> {
return this.http
.get(`${someURL}/shows`)
.pipe(map(result=>result.shows))
}
这篇关于Angular - HttpClient:将 Get 方法对象结果映射到数组属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!