在论坛的帮助下,我能够使用这种语法对我的httpclient可观察映射问题进行排序;
this._http.get<DomainMetaData>(serviceURL);
效果很好!但是,我有一个从嵌套服务器返回的json响应,并且想知道我是否可以使用与我当前使用的语法相同的语法,或者我现在需要手动将响应映射到我的类中吗?
根据我在这里看到的帖子,我创建了两个类来表示响应JSON的嵌套结构(见下文)。
函数调用...
getDomainMetaData(domain): Observable<DomainMetaData> {
let serviceURL = "http://localhost:3000/selectdomains?domain=" + domain;
return this._http.get<DomainMetaData>(serviceURL);
}
班级......
export class DomainMetaDataAttr {
constructor(public name: string,
public value: string) {
}
}
export class DomainMetaData {
constructor(public name: string,
public attributes: DomainMetaDataAttr[]) {
}
}
json的一个例子......
//DomainMetaData
// {
// "ResponseMetadata": {
// "RequestId": "11f000bf-0dff-8a2a-31ff-8631a9f25b5b",
// "BoxUsage": "0.0008183545"
// },
// "Items": [
// {
// "Name": "2",
// "Attributes": [
// {
// "Name": "Document Date",
// "Value": "22/03/13"
// },
// {
// "Name": "Document Ref",
// "Value": "Doc test"
// }
// ]
// },
我喜欢我当前解决方案的整洁和简洁,但我感谢我现在可能需要更改我的代码!
非常感谢。
答案 0 :(得分:1)
如果我理解正确,您想知道如何使用来自HttpClient调用的JSON响应。
我目前接近这样:
// x.service.ts
getData() {
return this.http.get(URL);
}
// x.component.ts
this.service.getData().subscribe(res => {
if (res['data']) {
const data = res['data'];
// do whatever with the data
}
});
使用上述方法,您可以在JSON上运行您想要的任何方法/过滤器,例如映射数组并将数据拉出/变异等等。不确定是否有必要创建其他类来处理嵌套的JSON数据。
答案 1 :(得分:1)
糟糕!我发布的代码实际上有效,我只是没有正确引用属性数组中的结果。
感谢您抽出时间来研究这个问题。