Angular 4 httpclient映射可观察到嵌套的json

时间:2017-10-06 10:42:38

标签: json angular observable

在论坛的帮助下,我能够使用这种语法对我的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"
//            }
//         ]
//      },

我喜欢我当前解决方案的整洁和简洁,但我感谢我现在可能需要更改我的代码!

非常感谢。

2 个答案:

答案 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)

糟糕!我发布的代码实际上有效,我只是没有正确引用属性数组中的结果。

感谢您抽出时间来研究这个问题。