使用Javascript将CSV数据转换为JSON格式

Pan*_*kaj 12 javascript jquery asp.net-mvc-4

我有CSV格式数据的数据,并希望使用Javascript转换为JSON格式.

以下是csv格式:

[Test.csv] 
id;name;author
integer;string;authors:n
1;To Kill an Angry Bird;1

[authors.csv] 
id;name
integer;string
1;Harper Lee
2;JRR Tolkien
3;William Shakespeare
Run Code Online (Sandbox Code Playgroud)

我想和他们的作者一起得到所有的书.那么请问我如何使用Javascript实现它.

Del*_*D0D 20

以下应该适合你.

全部归功于http://techslides.com/convert-csv-to-json-in-javascript

//var csv is the CSV file with headers
function csvJSON(csv){

  var lines=csv.split("\n");

  var result = [];

  var headers=lines[0].split(",");

  for(var i=1;i<lines.length;i++){

      var obj = {};
      var currentline=lines[i].split(",");

      for(var j=0;j<headers.length;j++){
          obj[headers[j]] = currentline[j];
      }

      result.push(obj);

  }

  //return result; //JavaScript object
  return JSON.stringify(result); //JSON
}
Run Code Online (Sandbox Code Playgroud)

  • 也许看看我的答案[这里](/sf/ask/4145298391/ -quotations-may/59219146#59219146),首先引导我来到这里的问题是什么?我并不完全希望复制粘贴我的答案,因为这个答案适用于大多数情况,但我认为在评论中保留此链接可能会在将来帮助处于这种边缘情况的其他人。:-) (5认同)
  • 如果任何分隔符之间的字符串是带有这些分隔符的带引号的字符串,则会出错。就像带逗号的引号句子一样,因为它将在字符串内的逗号处拆分,而不是忽略引号内的逗号。 (4认同)

fox*_*ris 8

基于@DelightedD0D,我会添加if (!lines[i]) continue这样它可以忽略任何空行和尾随行。

function csvJSON(csv) {
    const lines = csv.split('\n')
    const result = []
    const headers = lines[0].split(',')

    for (let i = 1; i < lines.length; i++) {        
        if (!lines[i])
            continue
        const obj = {}
        const currentline = lines[i].split(',')

        for (let j = 0; j < headers.length; j++) {
            obj[headers[j]] = currentline[j]
        }
        result.push(obj)
    }
    return result
}
Run Code Online (Sandbox Code Playgroud)


mar*_*aft 5

会签PapaParse。他们有一个名为的文件papaparse.min.js,您可以根据需要添加到您的项目中。PapaParse没有依赖项。

我自己使用过它,可以验证它是否有效,方便并且有据可查。


小智 5

我认为,我有一个更好的解决方案,这也有一个问题,即值不应包含逗号(,)。否则这是最好的解决方案。

 // convert csv to json
csvJSON(csvText) {
let lines = [];
const linesArray = csvText.split('\n');
// for trimming and deleting extra space 
linesArray.forEach((e: any) => {
    const row = e.replace(/[\s]+[,]+|[,]+[\s]+/g, ',').trim();
    lines.push(row);
});
// for removing empty record
lines.splice(lines.length - 1, 1);
const result = [];
const headers = lines[0].split(",");

for (let i = 1; i < lines.length; i++) {

    const obj = {};
    const currentline = lines[i].split(",");

    for (let j = 0; j < headers.length; j++) {
    obj[headers[j]] = currentline[j];
    }
    result.push(obj);
}
//return result; //JavaScript object
// return JSON.stringify(result); //JSON
return result;
}

// For Reading CSV File
readCSV(event) {
const reader = new FileReader();
reader.readAsText(event.files[0]);
reader.onload = () => {
    const text = reader.result;
    const csvToJson = this.csvJSON(text);
    console.log(csvToJson);
};
}
Run Code Online (Sandbox Code Playgroud)

谢谢