CSV转JSON

将逗号分隔值(CSV)字符串转换为二维对象数组。 字符串的第一行将用作标题行。

  • 使用Array.prototype.indexOf()找到第一个换行符(\n)的位置。
  • 使用Array.prototype.slice()删除第一行(标题行),并使用提供的delimiter将其分割为值。
  • 使用String.prototype.split()创建每一行的字符串。
  • 使用提供的delimiter将每一行的值分割开。
  • 使用Array.prototype.reduce()为每一行的值创建一个对象,其中键从标题行解析而来。
  • 如果不提供第二个参数delimiter,则使用默认的逗号分隔符,
const CSVToJSON = (data, delimiter = ',') => {
  const titles = data.slice(0, data.indexOf('\n')).split(delimiter);
  return data
    .slice(data.indexOf('\n') + 1)
    .split('\n')
    .map(v => {
      const values = v.split(delimiter);
      return titles.reduce(
        (obj, title, index) => ((obj[title] = values[index]), obj),
        {}
      );
    });
};

CSVToJSON('col1,col2\na,b\nc,d');
// [{'col1': 'a', 'col2': 'b'}, {'col1': 'c', 'col2': 'd'}];
CSVToJSON('col1;col2\na;b\nc;d', ';');
// [{'col1': 'a', 'col2': 'b'}, {'col1': 'c', 'col2': 'd'}];