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

3
我正在尝试将一个包含JSON对象的数组导出到CSV,这个数组的键值对数量可能会有所不同(也就是说,有些对象可能会比其他对象多出一些列)。我目前使用Angular2CSV软件包进行导出,但它只支持包含所有列的情况。
下面的代码展示了我的当前实现方式,服务返回要下载的数据。
private exportTable(){
        this.service.exportDataForDownload().then(response => {
            let csvFileName = "Results";
            new Angular2Csv(response, csvFileName, {headers: this.tableheaders});

        });
    }

你能否将对象填充以包含最多n(max)列的空单元格?在传递数据之前,这似乎是最明智的做法,以使其规范化。 - Charlie Schliesser
1个回答

2
根据这个问题(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});

最初的回答:需要编写确切的代码,我没有检查也不知道数据格式是什么。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接