web-dev-qa-db-fra.com

CSV à JSON en caractères typographiques

J'essaie de créer un fichier JSON à partir des données reçues d'un fichier CSV chargé à l'aide d'une entrée de téléchargement de fichier.

J'ai trouvé de nombreux articles faisant cela en Javascript mais ils ne fonctionnent tout simplement pas pour moi dans TypeScript.

L'erreur que je reçois lors de l'exécution du code ci-dessous est csv.Split n'est pas une fonction. Quelqu'un a-t-il une idée de la façon dont je peux modifier mon code pour qu'il fonctionne? 

Faites-moi savoir si vous avez besoin de plus d'informations et merci d'avance.

composant.ts

public testFile() {
    var file = (<HTMLInputElement>document.getElementById('fileInput')).files[0];        

    var jsonFile = this.csvJSON(file);


    // Set Http POST options
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });

    // Call Api with test connection data 
    this.http
        .post('/api/TestConnection/TestConnection', jsonFile, options)
        .subscribe(data => {
            // alert request ok
            alert('ok');
        }, error => {
            // Log error
            console.log(error.json());
        });
}

public 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
}
8
Toby Jackson

HTML

<input type="file" accept=".csv (change)="csv2Array($event)">

TypeScript

csv2Array(fileInput: any){
//read file from input
this.fileReaded = fileInput.target.files[0];

let reader: FileReader = new FileReader();
reader.readAsText(this.fileReaded);

 reader.onload = (e) => {
 let csv: string = reader.result;
 let allTextLines = csv.split(/\r|\n|\r/);
 let headers = allTextLines[0].split(',');
 let lines = [];

  for (let i = 0; i < allTextLines.length; i++) {
    // split content based on comma
    let data = allTextLines[i].split(',');
    if (data.length === headers.length) {
      let tarr = [];
      for (let j = 0; j < headers.length; j++) {
        tarr.Push(data[j]);
      }

     // log each row to see output 
     console.log(tarr);
     lines.Push(tarr);
  }
 }
 // all rows in the csv file 
 console.log(">>>>>>>>>>>>>>>>>", lines);
} 
}
1
Mahendra Waykos