angular - 当返回的 JSON 与 Angular 服务中的类不完全匹配时,将 API 响应映射到类
问题描述
我正在调用一个返回以下 JSON 结构的公共 API:
{
"meta": {
"xyz": "abc123"
},
"events": [
{
"event_id": "ggldfgsdl343409534095kgdflkgdslk",
"event_name": "Event 1",
},
{
"event_id": "214732hdfghdfghj43348fgdfgkjfdkf",
"event_name": "Event 2",
},
{
"event_id": "35345dsfgdgkjdfgdkjg49343djfgdfk",
"event_name": "Event 3",
}
]
}
我创建了一个名为 Event 的类:
export class Event {
eventId: String;
eventName: String;
}
这是我的 EventService 中对 API 的调用:
getEvents(): Observable<Event[]> {
return this.http.get<Event[]>(this.eventApiUrl, this.httpOptions);
}
我知道一些事情:
- 我的类的属性名称与 JSON 响应中的属性名称不匹配。
- 如上所示,唯一可行的方法是属性名称与 JSON 中的属性名称匹配,并且 API 直接返回一个对象数组
- 我想我需要使用 pipe(map()) 但无法正常工作
我想知道如何在“事件”数组中向下钻取一层并将其中的对象列表作为 Event[] 返回,同时考虑属性名称不匹配。
解决方案
getEvents(): Observable<Event[]> {
return this.http.get<Event[]>(this.eventApiUrl, this.httpOptions).pipe(
map((res: any) => {
return res.events.map(e => {
return { eventId: e.event_id, eventName: e.event_name };
})
});
);
}
你确实需要一个map
. 循环遍历events
响应对象内的 prop 并从每个对象构建一个新对象。
推荐阅读
- python - 根据条件将字典中的值分配给新列
- css - 如何避免在页面加载时使用 CSS grid-template-columns 进行布局转换?
- c++ - Visual Studio C++ 在 main 函数结束时触发断点
- github - 找不到从 GitHub webhook 响应创建 SHA256 的格式
- android - 错误:java.lang.ArrayIndexOutOfBoundsException:长度=5;指数=5
- sql - 如何获得人口数量最多的国家/地区人口最多的城市
- php - php 和 Ajax:当我选择主类别时自动显示子类别
- reactjs - 反应表单复选框删除或添加,第一次交互时不更新
- java - Hikari 数据源打开连接超过最大池大小限制
- xcode - SwiftUI:.fileExporter 仅导出 1 个文档