2017-03-15 38 views
6

Próbuję utworzyć plik JSON z danych otrzymanych z pliku CSV przesłanego przy użyciu danych przesłanych przez program do przesyłania plików.CSV do JSON w maszynie maszynowej

Znalazłem wiele postów robiących to w JavaScript, ale one po prostu nie działają dla mnie w Maszynopisie.

Błąd, który pojawia się podczas uruchamiania poniższego kodu to csv.Split nie jest funkcją, czy ktoś ma jakieś pomysły na to, jak mogę zmienić mój kod do pracy.

Daj mi znać, jeśli potrzebujesz więcej informacji i Z góry dziękuję.

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

Czy nie łatwiej i bardziej czytelny, jeśli wlać dane z pliku CSV do tablica mieszająca (tablica), a następnie przekształcić go do JSON? – IvRRimUm

+0

Zdecydowanie może być lepszy sposób na to, właśnie dlatego pytam o radę. –

+0

Okey, jakie błędy dostałeś z obecnego kodu? – IvRRimUm

Odpowiedz

3

są przechodzącą File do csvJSON metoda zamiast tekstu pliku. Możesz użyć FileReader, aby przeczytać jego zawartość. Oto przykład

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

Dziękuję bardzo, pracowałem jak smakołyk :) –

0

HTML

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

maszynopis

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); 
} 
}