如何在 Angular 中将动态 JSON 对象数组导出为 CSV?
Posted
技术标签:
【中文标题】如何在 Angular 中将动态 JSON 对象数组导出为 CSV?【英文标题】:How to export array of dynamic JSON objects to CSV in Angular? 【发布时间】:2019-08-25 14:07:25 【问题描述】:我正在尝试将 JSON 对象的数组导出到 CSV,而不是键值对的数量可能会有所不同(这意味着有些列可能比其他列多)。我目前可以使用 Angular2CSV 包导出,但它只支持包含所有列。
下面的代码显示了我当前的实现,其中服务返回要下载的数据。
private exportTable()
this.service.exportDataForDownload().then(response =>
let csvFileName = "Results";
new Angular2Csv(response, csvFileName, headers: this.tableheaders);
);
【问题讨论】:
您可以填充对象以包含最多 n(最大)列数的空单元格吗?这似乎是最明智的做法,在传入数据之前对其进行规范化。 【参考方案1】:基于此问题 (https://github.com/javiertelioz/angular2-csv/issues/27),您可能会找到更多动态解决方案的灵感:
该问题的解决方案类似于:
new Angular2Csv(this.data, 'myCsv', headers: Object.keys(this.data[0]) );
基于此:
创建一个包含唯一标题的集合:
let headerSet = new Set();
对于响应中的每一行,获取该行的键并将它们添加到集合中(伪代码)
for (r of/in response)
headerSet.add(Object.keys(r));
对于数据部分,您必须重新运行该过程并检查每一行是否有某个键,如果没有,您需要使用缺少的键放置和空值或您喜欢的东西(这很棘手因为所有的值都需要以正确的顺序插入,所以单独的 Set 解决方案可能不够)。
当所有可能的标题/数据都被添加时:
new Angular2Csv(response, csvFileName, headers: Array.from(headerSet);
需要编写确切的代码。我没查,也不知道数据格式是什么。
【讨论】:
以上是关于如何在 Angular 中将动态 JSON 对象数组导出为 CSV?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 TypeScript Angular 2 中将 Json 对象数组映射到另一个普通 json 对象
如何在 javascript (ionic | Angular | NodeJS | MongoDB) 中将包含对象的数组展平和减少为逗号分隔的字符串