Converter os dados CSV para o formato JSON usando Javascript

Tenho dados no formato CSV e quero converter para o formato JSON usando Javascript.

Segue-se o formato 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
Quero levar todos os livros com os autores. Então, por favor, Como posso implementá-lo usando Javascript.

Author: Mehmet Seckin, 2015-01-16

2 answers

O abaixo deve funcionar para ti.

Todos os créditos a 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
}
 7
Author: DelightedD0D, 2015-01-16 08:40:28

Tenho uma resposta semelhante como @Deleitedd0d, mas o meu código pode ser usado em conjunto com o Excel directamente (copiar e colar do Excel para um textarea).

function csvUpload(csvText){
        //Split all the text into seperate lines on new lines and carriage return feeds
        var allTextLines = csvText.split(/\r\n|\n/);
        //Split per line on tabs and commas
        var headers = allTextLines[0].split(/\t|,/);
        var lines = [];
        var locations = [];

        for (var i=1; i<allTextLines.length; i++) {
            var data = allTextLines[i].split(/\t|,/);

            if (data.length == headers.length) {

            var location = {"device_id":data[0], "address":data[1], "city":data[2]};
            locations.push(location);

            }

        }
        return locations;
    }

Desta forma você pode usar um CSV que é copiado para o Excel. O Excel irá remover os separadores como , e outros e irá inserir novas linhas, etc.

Com o meu código, podes passar tudo para um campo de texto directamente do Excel e usá-lo para criar um json. Tenho aqui o nome dos campos estáticos., mas você poderia usar o código do @Deleitedd0d para definir os cabeçalhos dinamicamente:
 for(var j=0;j<headers.length;j++){
          obj[headers[j]] = currentline[j];
      }
 0
Author: VeldMuijz, 2015-01-16 09:10:20