【问题标题】:How to export array of dynamic JSON objects to CSV in Angular?如何在 Angular 中将动态 JSON 对象数组导出为 CSV?
【发布时间】: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(最大)列数的空单元格吗?这似乎是最明智的做法,在传入数据之前对其进行规范化。

标签: javascript angular typescript csv


【解决方案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});

需要编写确切的代码。我没查,也不知道数据格式是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    相关资源
    最近更新 更多