JSON转CSV

将对象数组转换为只包含指定columns的逗号分隔值(CSV)字符串。

  • 使用Array.prototype.join()columns中的所有名称组合在一起,使用提供的delimiter创建第一行。
  • 使用Array.prototype.map()Array.prototype.reduce()为每个对象创建一行。将不存在的值替换为空字符串,并且只映射columns中的值。
  • 使用Array.prototype.join()将所有行组合成一个字符串,使用换行符(\n)分隔每一行。
  • 如果不提供第三个参数delimiter,则使用默认的分隔符,
const JSONtoCSV = (arr, columns, delimiter = ',') =>
  [
    columns.join(delimiter),
    ...arr.map(obj =>
      columns.reduce(
        (acc, key) =>
          `${acc}${!acc.length ? '' : delimiter}"${!obj[key] ? '' : obj[key]}"`,
        ''
      )
    ),
  ].join('\n');

JSONtoCSV(
  [{ a: 1, b: 2 }, { a: 3, b: 4, c: 5 }, { a: 6 }, { b: 7 }],
  ['a', 'b']
); // 'a,b\n"1","2"\n"3","4"\n"6",""\n"","7"'
JSONtoCSV(
  [{ a: 1, b: 2 }, { a: 3, b: 4, c: 5 }, { a: 6 }, { b: 7 }],
  ['a', 'b'],
  ';'
); // 'a;b\n"1";"2"\n"3";"4"\n"6";""\n"";"7"'