首页 > 解决方案 > JavaScript:字典列表(JSON)到 csv

问题描述

我正在对字典列表进行一些操作,最后希望将数据以 csv 的形式保存在浏览器的本地存储中。

我的字典数据列表如下所示:

[{
    arrivalAddress: "Address"
arrivalLat: "72.989506"
arrivalLon: "19.149307"
arrivalTimeEnd: "8/8/2020 13:37"
arrivalTimeStart: "8/8/2020 13:37"
carrier: "ABC"
departureAddress: "abc,sdkfnv"
departureLat: "73.008304"
departureLon: "19.114599"
departureTime: "8/8/2020 13:37"
hazardousGoods: "TRUE"
id: "1"
"receiver ": "Tom"
sender: "Jack"
tourID: "abc"
vehicleClass: "eu_heavy"
},
arrivalAddress: "Address"
arrivalLat: "72.989506"
arrivalLon: "19.149307"
arrivalTimeEnd: "8/8/2020 13:37"
arrivalTimeStart: "8/8/2020 13:37"
carrier: "ABC"
departureAddress: "abc,sdkfnv"
departureLat: "73.008304"
departureLon: "19.114599"
departureTime: "8/8/2020 13:37"
hazardousGoods: "TRUE"
id: "1"
"receiver ": "Tom"
sender: "Jack"
tourID: "abc"
vehicleClass: "eu_heavy"
},
......

]

我希望它像这样保存在浏览器的本地存储中:

在此处输入图像描述

谁能帮我将字典列表转换为csv?

标签: javascript

解决方案


我认为应该这样做。

const listOfDicts = [...];

const dictionaryKeys = Object.keys(listOfDicts[0]);

const dictValuesAsCsv = listOfDicts.map(dict => (
  dictionaryKeys.map(key => dict[key]).join(',')
));

const result = [dictionaryKeys.join(','), ...dictValuesAsCsv].join('\n');


请注意,键的顺序可能不正确,因为您应该首先dictionaryKeys按正确的顺序排序(如果键是恒定的,您可以替换const dictionaryKeys = Object.keys(listOfDicts[0]);const dictionaryKeys = ['key1', 'key2', ...];


编辑:

要回答有关值中逗号的问题,您应该进行以下更改

const dictValuesAsCsv = listOfDicts.map(dict => (
  dictionaryKeys.map(key => {
    if (dict[key].includes(',')) {
      return `"${dict[key]}"`;
    }
   
    return dict[key];
  }).join(',')
));

解释:唯一的区别是你不是简单地 return dict[key],而是首先检查它是否包含逗号;如果是,则将其用引号括起来,否则将保持原样。


推荐阅读