Typescript,JSON:Mapping嵌套数组始终返回空

Typescript,JSON:Mapping嵌套数组始终返回空,json,parsing,typescript,ionic2,http-get,Json,Parsing,Typescript,Ionic2,Http Get,我是typescript新手,尝试从GET请求解析JSON,如下所示(删除了一些数据): 例如,我得到的是“货币汇率”,但“数据”数组是空的 GET请求如下所示(仅相关部分): 我仍在研究它,但使用this.http.GET(${this.api\u url}?${bodyString})GET请求看起来有点古怪。实际上返回: {"connections":[],"currency":"EUR","del":0,"time":1,"search_params":{"to_type":"anywh

我是typescript新手,尝试从GET请求解析JSON,如下所示(删除了一些数据):

例如,我得到的是“货币汇率”,但“数据”数组是空的

GET请求如下所示(仅相关部分):

我仍在研究它,但使用
this.http.GET(
${this.api\u url}?${bodyString}
)GET请求看起来有点古怪。
实际上返回:

{"connections":[],"currency":"EUR","del":0,"time":1,"search_params":{"to_type":"anywhere","flyFrom_type":"anywhere","seats":{"infants":0,"passengers":1,"adults":1,"children":0}},"ref_tasks":{},"currency_rate":1.0,"data":[],"refresh":[]}
与上面的GET请求不同的结果。不知道我是否清楚。但是像这样尝试GET请求(我将为您提供URLSearchParams的长定义)会导致错误的网关错误:

return this.http.get(this.api_url, {search: params})
  .map(res => res)
----编辑----- 在我将整个URL复制粘贴到以下位置后,它起到了作用:

return this.http.get(<URL PASTED HERE>)
  .map(res => res)
返回这个.http.get()
.map(res=>res)

仍然希望知道如何以干净的方式传递参数,而不是将整个URL粘贴在其中。

json响应的一部分将不可见

尝试:


您将从http获得一个
可观察的
,其中既包含
汇率
又包含
数据

我不明白您试图通过
数据实现什么:可观察。正如@suraj所说,“json响应的一部分不会是可见的”

至于答案,我认为您不需要将响应键入典型的界面。一个简单的
.map(res=>res.json())也可以。我想你需要这样,但是,我只是说让它更容易

不确定是否存在问题?因此,您可以执行此操作并检查数据是否到达您的GET:

return Observable.create(observer => {
    this.http.get(`${this.api_url}?${bodyString}`)
      .map(res => res.json())
      .subscribe((data) => {
            console.log("Data : ", data);
            observer.next(data);
      },
      (err) => {
            console.log("Error : ", err);
            observer.error(err);
      });
});
检查上述日志是否记录了必要的数据。如果确实如此,请像在代码中那样通过类型转换再次检查


现在,您将向调用方法返回一个新的可观察对象。因此,在调用方法时也必须
subscribe()

问题在于GET请求。由于某些原因,使用URLSearchParams/RequestOptions不起作用。不断出现“坏网关”错误。因此,我在http请求中直接传递url,如下所示:

this.http.get('https://api.skypicker.com/flights?' + bodyStringSerialized)
使用下面的serialize函数(我发现这个函数的另一个版本与param值的值有误,所以我删除了编码)。我像这样使用“序列化(json)”:


谢谢你的帮助

嘿,谢谢你的帮助。但不幸的是,这也没有做到。还尝试了
数据:SkyPickerLightData[]
还有其他想法吗?嗨,萨加尔,谢谢你的帮助。返回的数据看起来是错误的。所以可能是GET请求。我记录了URL请求,它看起来和平常有点不同,实际上也返回空的“data[]”。所以问题出在get请求中。酷。我只是把你的get网址放在浏览器里。结果与您期望的格式相差甚远。但是,我确实在结果中发现了
currency\u rate
param。我想您可以在
console.log(data.currency\u rate)
console.log(data['currency\u rate'])中访问它。若要帮助您调试此url,请在放置此url后从浏览器输出中获取结果并将其粘贴到中。应该有点帮助。
return this.http.get(this.api_url, {search: params})
  .map(res => res)
return this.http.get(<URL PASTED HERE>)
  .map(res => res)
export interface SkyPickerFlightI {
  currency: string;
  data: any[];
}
return Observable.create(observer => {
    this.http.get(`${this.api_url}?${bodyString}`)
      .map(res => res.json())
      .subscribe((data) => {
            console.log("Data : ", data);
            observer.next(data);
      },
      (err) => {
            console.log("Error : ", err);
            observer.error(err);
      });
});
this.http.get('https://api.skypicker.com/flights?' + bodyStringSerialized)
serialize(obj, prefix) {
var str = [], p;
for(p in obj) {
  if (obj.hasOwnProperty(p)) {
    var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p];
    str.push((v !== null && typeof v === "object") ?
      this.serialize(v, k) :
      k + "=" + v);
  }
}
return str.join("&");
}