JavaScript:从JSON到csv的字典列表

JavaScript:从JSON到csv的字典列表,javascript,Javascript,我正在对字典列表进行一些操作,最后希望将数据以csv的形式保存在浏览器的本地存储中 我的字典数据列表如下所示: [{ arrivalAddress: "Address" arrivalLat: "72.989506" arrivalLon: "19.149307" arrivalTimeEnd: "8/8/2020 13:37" arrivalTimeStart: "8/8/2020 13:37&q

我正在对字典列表进行一些操作,最后希望将数据以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"
},
......

]
我希望它保存在浏览器的本地存储中,如下所示:

[{
    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吗?

我想这应该可以

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(',')
));

说明:唯一的区别是,您不只是返回
dict[key]
,而是首先检查它是否包含逗号;如果是,则用引号将其括起来,否则将保持原样。

本地存储区中的所有数据将保存为
字符串
格式。您是如何保存数据的?请添加您的代码?谢谢您的回答,列名很完美,但所有行都在一行中,您知道如何在新行中打断该行吗?哦,是的,我想我犯了一个小错误。我认为最后一行应该是
const result=[dictionaryKeys.join(','),…dictValuesAsCsv].join('\n')(注意
dictValuesAsCsv
之前的
..
扩展运算符)。你能试试看,然后告诉我它是否有效吗?如果有,我将确保编辑原始答案并进行更正。我知道这不是我问题的一部分,但在转换为csv时,我在一个单元格中遇到了一些问题,我的值为
abc,sdkfnv
,最终结果是在两个不同的单元格中得到
abc
sdkfv
,有什么解决办法吗?是的,你可以用引号转义逗号。我编辑了我的帖子,回答了这个问题。