Skip to content

Latest commit

 

History

History
54 lines (38 loc) · 2.03 KB

csv-to-json.md

File metadata and controls

54 lines (38 loc) · 2.03 KB
标题 标签
CSVToJSON(将逗号分割的值字符串转成 JSON 对象) string,object,advanced(字符串,对象,高级的)

将一个逗号分割的值字符串转成一个 2D 对象数组。字符串的第一行用作对象属性名。

  • 使用Array.prototype.slice()Array.prototype.indexOf('\ n')String.prototype.split(delimiter)方法来将第一行(用作属性名的第一行)分隔为多个值

  • 使用String.prototype.split('\ n')为每一行创建一个字符串,然后使用Array.prototype.map()String.prototype.split(delimiter)分隔每行中的值

  • 使用Array.prototype.reduce()为每一行的值创建一个对象,并从第一行中解析属性名(键名)

  • 如果不传入第二个参数delimiter,也就是分隔符,则使用默认的分隔符,即","

代码如下:

const CSVToJSON = (str, delimiter = ",") => {
  const titles = str.slice(0, str.indexOf("\n")).split(delimiter);
  return str
    .slice(str.indexOf("\n") + 1)
    .split("\n")
    .map((v) => {
      const values = v.split(delimiter);
      return titles.reduce(
        (obj, title, index) => ((obj[title] = values[index]), obj),
        {}
      );
    });
};

ts代码如下:

调用方式:

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'}];

应用场景

以下是基于上述代码实现的示例:

结果如下:

<iframe src="codes/javascript/html/csv-to-json.html"></iframe>