Typescript 中的 CSV 到 JSON
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/42809177/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
CSV to JSON in Typescript
提问by Toby Hymanson
I am trying to create a JSON file from the data received from a CSV file uploaded using a file uploader input.
我正在尝试从使用文件上传器输入上传的 CSV 文件接收的数据创建一个 JSON 文件。
I have found lots of posts doing this in Javascript but they just aren't quite working for me in Typescript.
我在 Javascript 中发现了很多这样的帖子,但它们在 Typescript 中对我来说不太适用。
The error I get when running the below code is csv.Split is not a function, does anyone have any ideas how I can alter my code to work.
运行以下代码时出现的错误是 csv.Split 不是函数,有没有人知道我如何更改代码以使其正常工作。
Let me know if you need more information and Thanks in advance.
如果您需要更多信息,请告诉我,并提前致谢。
component.ts
组件.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
}
采纳答案by Aleksey L.
You are passing File
to csvJSON
method instead of file's text. You can use FileReader
to read its content. Here's an example
您正在传递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'>
回答by Mahendra Waykos
HTML
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);
}
}