Javascript 如何将动态JSON对象数组导出到CSV中?
我正在尝试将一组JSON对象导出到CSV,它们的键值对数量可能会有所不同(这意味着某些对象可能比其他对象有更多的列)。我目前可以使用Angular2CSV包导出,但它只支持包含所有列的情况 下面的代码显示了我当前的实现,其中服务返回要下载的数据Javascript 如何将动态JSON对象数组导出到CSV中?,javascript,angular,typescript,csv,Javascript,Angular,Typescript,Csv,我正在尝试将一组JSON对象导出到CSV,它们的键值对数量可能会有所不同(这意味着某些对象可能比其他对象有更多的列)。我目前可以使用Angular2CSV包导出,但它只支持包含所有列的情况 下面的代码显示了我当前的实现,其中服务返回要下载的数据 private exportTable(){ this.service.exportDataForDownload().then(response => { let csvFileName = "Result
private exportTable(){
this.service.exportDataForDownload().then(response => {
let csvFileName = "Results";
new Angular2Csv(response, csvFileName, {headers: this.tableheaders});
});
}
基于此问题(),您可能会找到一个更具动态性的解决方案:
该问题的解决方案类似于:
new Angular2Csv(this.data, 'myCsv', { headers: Object.keys(this.data[0]) });
基于此:
创建包含唯一标题的集:
let headerSet = new Set();
对于响应中的每一行,获取该行的键并将它们添加到集合中(伪代码)
对于数据部分,您必须重新运行流程,并检查每一行是否有某个键,如果没有,则需要将缺少的键放入并清空值或其他您喜欢的内容(这很棘手,因为所有值都需要按正确的顺序插入,所以仅使用一个设置的解决方案可能不够)
添加所有可能的标题/数据时:
new Angular2Csv(response, csvFileName, {headers: Array.from(headerSet});
需要编写准确的代码。我没有检查,也不知道数据格式是什么。您可以填充对象以包含最多n(最大)列数的空单元格吗?这似乎是最明智的做法,在传入数据之前对其进行规范化。
new Angular2Csv(response, csvFileName, {headers: Array.from(headerSet});