2017-03-15 58 views
6

Dosya yükleyici girişi kullanılarak yüklenen CSV dosyasından alınan verilerden bir JSON dosyası oluşturmaya çalışıyorum.Typescript'de JSON için CSV

Javascript'te bunu yaparken çok sayıda yazı buldum ama onlar sadece Typescript'te tam olarak çalışmıyorlar.

Aşağıdaki kodu çalıştırırken karşılaştığım hata csv.Split bir işlev değil, benim işimde kodumu nasıl değiştirebileceğime dair herhangi bir fikrim var mı?

Daha fazla bilgiye ihtiyacınız varsa ve şimdiden teşekkürler.

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 
} 
+0

Eğer csv'den Hash Table'a (array) veri döküp daha sonra json'a dönüştürürseniz daha kolay ve okunabilir değil mi? – IvRRimUm

+0

Bunu yapmak için daha iyi bir yol kesinlikle olabilir, tam olarak neden tavsiye istiyorum. –

+0

Okey, geçerli kodunuzdan ne gibi hatalar alıyorsunuz? – IvRRimUm

cevap

3

Sen File yöntem yerine dosyanın metin csvJSON için geçiyor. İçeriğini okumak için FileReader'u kullanabilirsiniz. Burada bir örnek

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'>

+0

Çok teşekkür ederim, bir muamele gibi çalıştım :) –

0

HTML

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

typescript var 0
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); 
} 
}