我正在解析一个csv文件:
let lines = csvData.split(/\r\n|\n/);
let headers = lines[0].split(',');
for (let i = 1; i < lines.length; i++) {
let values = lines[i].split(',');
let item = {};
for (let j = 0; j < headers.length; j++) {
item[headers[j]] = values[j];
}
items.push(item);
}
return items;
我正在获取其数据。但是,数据都是字符串。我想将它们传递给JSON,并使它们没有类型,因此我可以将它们传递给具有不同类型的变量。我不想直接使用parseInt / parseFloat,因为我不知道每个变量的具体类型。
但是,每次我将值传递给JSON时,它们都是字符串,例如。 “ 1234”,而不是1234。通常,我可以将JSON数据传递给没有类型的类,但是这次我将csvData转换为JSON,JSON数据都是字符串。我想这是因为split函数使它成为字符串?
可选:
我可以将类型传递给此函数,例如readCsvFile<T>(csvData)
,可以执行以下操作:
if (typeof(T[headers[j]]) == 'number') {
item[headers[j]] = parseFloat(values[j]);
} else {
item[headers[j]] = values[j];
}
但是T [header [j]]未通过编译。
答案 0 :(得分:1)
我会做些更实用的事情。
//Define variables
var csvData = "field1a,field2a,field3a\r\nfield1b,field2b,field3b";
var linesAsObjects = [];
var lines = csvData.split(/\r\n|\n/);
//Split fields here
var splitFields = function(line){
let fields = line.split(',');
addItem(fields);
}
// Assign field values to object or formatting here
var addItem = function(fields){
let obj = {};
obj.field1 = fields[0];
obj.field2 = fields[1];
obj.field3 = fields[2];
linesAsObjects.push(obj);
}
// Call the code for each line
lines.forEach(splitFields);
//Printing lines and fields as assigned to an object.
console.log(linesAsObjects);
答案 1 :(得分:1)
如果您不需要知道类型(实际上您并不试图获取具有未知类型的属性的值),则可以使用“未知”类型https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-0.html
这比“ any”要好得多,您可以在需要获取数据的位置键入数据。
答案 2 :(得分:0)
尝试对属性使用type any。
// add the fields you have from the CSV
class ResultFromCSV {
myValue: any;
otherValue: any;
}
...
let lines = csvData.split(/\r\n|\n/);
let headers = lines[0].split(',');
for (let i = 1; i < lines.length; i++) {
let values = lines[i].split(',');
// instantiate here
let item = new ResultFromCSV();
for (let j = 0; j < headers.length; j++) {
item[headers[j]] = values[j];
}
items.push(item);
}
return items;