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

Posted

技术标签:

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

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

【讨论】:

以上是关于如何在 Angular 中将动态 JSON 对象数组导出为 CSV?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TypeScript Angular 2 中将 Json 对象数组映射到另一个普通 json 对象

如何在 javascript (ionic | Angular | NodeJS | MongoDB) 中将包含对象的数组展平和减少为逗号分隔的字符串

在 Angular 7 中将 Json 转换为对象

在Angular8中将HTTP响应json转换为打字稿对象

Angular 5中json对象的动态嵌套材质菜单

如何在Word中将http请求响应映射到我定义的对象