如何在Angular中将动态JSON对象数组导出到CSV?

时间:2019-04-03 22:45:21

标签: javascript angular typescript csv

我正在尝试将JSON对象数组导出到CSV,但键值对的数量可能会有所不同(这意味着有些可以比其余的具有更多的列)。我目前可以使用Angular2CSV包导出,但仅在包含所有列的情况下才支持。

下面的代码显示了我当前的实现,其中服务返回要下载的数据。

private exportTable(){
        this.service.exportDataForDownload().then(response => {
            let csvFileName = "Results";
            new Angular2Csv(response, csvFileName, {headers: this.tableheaders});

        });
    }

1 个答案:

答案 0 :(得分: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});

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