在Typescript中将CSV转换为JSON
我正尝试从使用文件上传器输入上传的CSV文件中接收到的数据创建JSON文件。
我在Javascript中发现了很多帖子,但在Typescript中他们对我来说并不是很有用。
运行下面的代码时得到的错误是csv.Split不是一个函数,有没有人有任何想法,我可以改变我的代码工作。
让我知道你是否需要更多的信息,并提前致谢。
component.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
}
  您将File传递给csvJSON方法而不是文件的文本。  您可以使用FileReader来读取其内容。  这是一个例子 
const convertFile = () => {
  const input = document.getElementById('fileInput');
  const reader = new FileReader();
  reader.onload = () => {
    let text = reader.result;
    console.log('CSV: ', text.substring(0, 100) + '...');
    
    //convert text to json here
    //var json = this.csvJSON(text);
  };
  reader.readAsText(input.files[0]);
};<input type='file' onchange='convertFile(event)' id='fileInput'>HTML
<input type="file" accept=".csv (change)="csv2Array($event)">
打字稿
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);
} 
}
