我正在尝试将JSON对象数组导出到CSV,但键值对的数量可能会有所不同(这意味着有些可以比其余的具有更多的列)。我目前可以使用Angular2CSV包导出,但仅在包含所有列的情况下才支持。
下面的代码显示了我当前的实现,其中服务返回要下载的数据。
private exportTable(){
this.service.exportDataForDownload().then(response => {
let csvFileName = "Results";
new Angular2Csv(response, csvFileName, {headers: this.tableheaders});
});
}
答案 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});
需要编写准确的代码。我没有检查也不知道数据格式是什么。