gpt4 book ai didi

javascript - 将 json 响应数组的值映射到预定义的接口(interface)

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:56 24 4
gpt4 key购买 nike

我想将 JSON 响应的值映射到以下接口(interface):

export interface CyHourlyWeather {
temperature: string;
skycon: string;
precipitation: number;
wind: {
speed: number,
direction: number
},
cloudrate: number
}

我想将服务器响应映射到 HourlyWeather: Array<CyHourlyWeather> , 这样数组可能包含多个 CyHourlyWeather .但是,数组的数据结构很复杂——我想不出一种方法来过滤和映射这些数据。

JSON 响应:

 "result":{
"status":"ok",
"hourly":{
"status":"ok",
"temperature":[
{
"value":8.0,
"datetime":"2015-09-28 13:00"
},
{},
] // e.g. 1hr, 2hr, 3hr...
"skycon": [{"value": ..., "datetime": ...}, {}],
"precipitation": [{"value": ..., "datetime": ... }, {}],
"wind": [{"speed": ..., "direction": ...}, {}],
"cloudrate": [{"value": ..., "datetime": ... }, {}],
}
}

我知道如何检索数据(例如获取特定值)并进行简单映射(例如将响应映射为单个对象而不是数组),但是当我尝试应用一些 javascript 数组(forEach ... ) 和迭代函数,它只是以某种方式失败了。关于如何实现这个有什么建议吗?

编辑 - 我尝试过的:

this.caiyunForecastService.getCaiyunForecast()
.subscribe( val => this.hourlyWeather = val.map(element => {
return <CyHourlyWeather> {
temperature: element.result.hourly.temperature.value,
skycon: element.result.hourly.skycon.value,
precipitation: element.result.hourly.precipitation.value,
wind: {
speed: element.result.hourly.wind.speed,
direction: element.result.hourly.wind.direction
},
cloudrate: element.result.hourly.cloudrate.value
}
}));

这会返回一个 val.map 不是函数并且失败。

编辑 2 - 更长的样本响应

"result":{
"status":"ok",
"hourly":{
"status":"ok",
"pm25":[ //pm25
{
"value":8.0,
"datetime":"2015-09-28 13:00"
},
{
"value":8.0,
"datetime":"2015-09-28 14:00"
},
{
"value":7.0,
"datetime":"2015-09-28 15:00"
},
{
"value":3.0,
"datetime":"2015-09-28 16:00"
},
{
"value":-0.0,
"datetime":"2015-09-28 17:00"
},
{
"value":-0.0,
"datetime":"2015-09-28 18:00"
},
{
"value":-0.0,
"datetime":"2015-09-28 19:00"
},
{
"value":-0.0,
"datetime":"2015-09-28 20:00"
},
{
"value":-0.0,
"datetime":"2015-09-28 21:00"
},
{
"value":-0.0,
"datetime":"2015-09-28 22:00"
},
{
"value":-0.0,
"datetime":"2015-09-28 23:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 00:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 01:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 02:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 03:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 04:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 05:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 06:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 07:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 08:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 09:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 10:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 11:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 12:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 13:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 14:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 15:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 16:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 17:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 18:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 19:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 20:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 21:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 22:00"
},
{
"value":-0.0,
"datetime":"2015-09-29 23:00"
},
{
"value":-0.0,
"datetime":"2015-09-30 00:00"
},
{
"value":-0.0,
"datetime":"2015-09-30 01:00"
},
{
"value":-0.0,
"datetime":"2015-09-30 02:00"
},
{
"value":-0.0,
"datetime":"2015-09-30 03:00"
},
{
"value":-0.0,
"datetime":"2015-09-30 04:00"
},
{
"value":-0.0,
"datetime":"2015-09-30 05:00"
},
{
"value":3.0,
"datetime":"2015-09-30 06:00"
},
{
"value":8.0,
"datetime":"2015-09-30 07:00"
},
{
"value":14.0,
"datetime":"2015-09-30 08:00"
},
{
"value":19.0,
"datetime":"2015-09-30 09:00"
},
{
"value":24.0,
"datetime":"2015-09-30 10:00"
},
{
"value":29.0,
"datetime":"2015-09-30 11:00"
},
{
"value":33.0,
"datetime":"2015-09-30 12:00"
}
],

"description":"\u66b4\u96e8\u6e10\u5927\uff0c\u4eca\u5929\u665a\u95f421\u70b9\u949f\u540e\u5927\u96e8\uff0c\u5176\u540e\u9634",
"skycon":[
{
"value":"RAIN",
"datetime":"2015-09-28 13:00"
},
{
"value":"RAIN",
"datetime":"2015-09-28 14:00"
},
{
"value":"RAIN",
"datetime":"2015-09-28 15:00"
},
{
"value":"RAIN",
"datetime":"2015-09-28 16:00"
},
{
"value":"RAIN",
"datetime":"2015-09-28 17:00"
},
{
"value":"RAIN",
"datetime":"2015-09-28 18:00"
},
{
"value":"RAIN",
"datetime":"2015-09-28 19:00"
},
{
"value":"RAIN",
"datetime":"2015-09-28 20:00"
},
{
"value":"RAIN",
"datetime":"2015-09-28 21:00"
},
{
"value":"RAIN",
"datetime":"2015-09-28 22:00"
},
{
"value":"RAIN",
"datetime":"2015-09-28 23:00"
},
{
"value":"RAIN",
"datetime":"2015-09-29 00:00"
},
{
"value":"RAIN",
"datetime":"2015-09-29 01:00"
},
{
"value":"RAIN",
"datetime":"2015-09-29 02:00"
},
{
"value":"RAIN",
"datetime":"2015-09-29 03:00"
},
{
"value":"RAIN",
"datetime":"2015-09-29 04:00"
},
{
"value":"RAIN",
"datetime":"2015-09-29 05:00"
},
{
"value":"RAIN",
"datetime":"2015-09-29 06:00"
},
{
"value":"RAIN",
"datetime":"2015-09-29 07:00"
},
{
"value":"RAIN",
"datetime":"2015-09-29 08:00"
},
{
"value":"RAIN",
"datetime":"2015-09-29 09:00"
},
{
"value":"RAIN",
"datetime":"2015-09-29 10:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-29 11:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-29 12:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-29 13:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-29 14:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-29 15:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-29 16:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-29 17:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-29 18:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-29 19:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-29 20:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-29 21:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-29 22:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-29 23:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-30 00:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-30 01:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-30 02:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-30 03:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-30 04:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-30 05:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-30 06:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-30 07:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-30 08:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-30 09:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-30 10:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-30 11:00"
},
{
"value":"CLOUDY",
"datetime":"2015-09-30 12:00"
}
],

还有一个测试 API:https://api.caiyunapp.com/v2/TAkhjf8d1nlSlspN/121.6544,25.1552/forecast.json

最佳答案

在您的 CaiyunForecastService 中试试这个。

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

export interface CyHourlyWeather {
temperature: string;
skycon: string;
precipitation: number;
wind: {
speed: number;
direction: number;
};
cloudrate: number;
}

@Injectable({
providedIn: 'root'
})
export class CaiyunForecastService {

constructor(private http: HttpClient) { }

public getCaiyunForecast(): Observable<CyHourlyWeather[]> {
return this.http.get(
'https://api.caiyunapp.com/v2/TAkhjf8d1nlSlspN/121.6544,25.1552/forecast.json'
).pipe(map((res: any) => this.mapResult(res)));
}

private mapResult(res): CyHourlyWeather[] {
const cyHourlyWeatherArray: CyHourlyWeather[] = [];
for (let i = 0; i < res.result.hourly.temperature.length; i += 1) {
cyHourlyWeatherArray.push({
temperature: res.result.hourly.temperature[i].value,
skycon: res.result.hourly.skycon[i].value,
precipitation: res.result.hourly.precipitation[i].value,
wind: {
speed: res.result.hourly.wind[i].speed,
direction: res.result.hourly.wind[i].direction
},
cloudrate: res.result.hourly.cloudrate[i].value
});
}
return cyHourlyWeatherArray;
}
}

这将返回 Observable<CyHourlyWeather[]>因此您可以在解析时订阅并获取 CyHourlyWeather 数组。尚未对此进行测试,如果有任何问题,请告诉我。

请注意,这是改编自 Ionic v4 项目。

关于javascript - 将 json 响应数组的值映射到预定义的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54850407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com