我正在尝试使用Java脚本将逗号分隔的值文件(CSV)转换为“ json”:
var csv = "FirstName,LastName,dob,phone"+
"John,Smith,10/01/1998,21234123"+
"Millie,Henderson,23/03/2000,21768345"+
"Briana,Wright,23/03/1976,22321467";
function csvJSON(csv){
var values=csv.split(',');
var index =-1;
var lines = [];
for(var i=0;i<values.length; i++){
lines[index] = lines[index]+ values[i]+ ",";
if (i % 3==0){
index++;
}
}
var result = [];
var headers=lines[0].split(',');
lines.splice(0, 1);
lines.forEach(function(line) {
var obj = {};
var currentline = line.split(',');
headers.forEach(function(header, i) {
obj[header] = currentline[i];
});
result.push(obj);
});
return result; //JavaScript object
//return JSON.stringify(result); //JSON
}
console.log(csvJSON(csv))
不幸的是,我遇到了以下错误。在我精疲力尽之前,有人可以在这里帮助我吗!谢谢!! (最后,我实际上是通过Web应用程序将csv文件导入到RealTime Fire-base数据库中的。VARCSV仅用于测试目的。(而且我将无法使用npm库。。)
答案 0 :(得分:0)
在其他问题中,您正在串联整个csv文件且没有换行符。完成的字符串将以“ phoneJohn”作为一个字符串,并以“ 21234123Millie”作为另一个字符串,因为没有字符将它们分开。似乎您编写的代码期望它们之间使用逗号,但是在JavaScript中将"like"+"this"
的两个字符串简单地串联在一起将得到字符串"likethis
”,并且您将无法将它们分开再次。
答案 1 :(得分:0)
通过\n
将csv拆分为行,并通过,
分隔col。使用代码将任何csv转换为json。对象键将是csv标头。
var csv = `FirstName,LastName,dob,phone
John,Smith,10/01/1998,21234123
Millie,Henderson,23/03/2000,21768345
Briana,Wright,23/03/1976,22321467`;
function csvJSON(csv) {
//split csv data with \n get all rows of csv
var rows = csv.split('\n');
//index of 0 is header then split header string with ,
var headers = rows[0].split(',');
//remove headers index 0 from rows
rows = rows.splice(1);
var result = [];
rows.forEach(function (row) {
var obj = {};
//split data row with ,
var values = row.split(',');
headers.forEach(function (key, index) {
obj[key] = values[index];
});
result.push(obj);
})
return result;
}
console.log(csvJSON(csv))
答案 2 :(得分:0)
var csv = "FirstName,LastName,dob,phone"+
"John,Smith,10/01/1998,21234123"+
"Millie,Henderson,23/03/2000,21768345"+
"Briana,Wright,23/03/1976,22321467";
function csvJSON(csv){
var values=csv.split(',');
var index =-1;
var lines = [];
for(var i=0;i<values.length; i++){
lines[index] = lines[index]+ values[i]+ ",";
if (i % 4==0){
index++;
}
}
var result = [];
var headers=lines[0].split(',');
lines.splice(0, 1);
lines.forEach(function(line) {
var obj = {};
var currentline = line.split(',');
headers.forEach(function(header, i) {
obj[header] = currentline[i];
});
result.push(obj);
});
return result; //JavaScript object
//return JSON.stringify(result); //JSON
}
console.log(csv)
console.log(csvJSON(csv))
答案 3 :(得分:0)
由于最终打算将实际的csv文件用作输入,因此,您需要确保所有值都用逗号分隔。可以肯定的是,csv文件是这样工作的。...可能是错误的。 在每一行的末尾,您 not 都包含一个逗号。我已在下面的代码段中修复了该问题。
我还更正了使用4列的内容(您似乎有4个标题,但仅尝试使用3个?),将index ++行移动到了之前,检查了未定义的值在连接到这些行之前,并删除了空白标题。
var csv = "FirstName,LastName,dob,phone,"+
"John,Smith,10/01/1998,21234123,"+
"Millie,Henderson,23/03/2000,21768345,"+
"Briana,Wright,23/03/1976,22321467";
function csvJSON(csv){
var values=csv.split(',');
var index =-1;
var lines = [];
for(var i=0;i<values.length; i++){
if (i % 4==0){
index++;
}
if (typeof lines[index] === 'undefined') lines[index] = "";
lines[index] = lines[index]+ values[i]+ ",";
}
var result = [];
var headers=lines[0].split(',').splice(0, lines.length);
lines.splice(0, 1);
lines.forEach(function(line) {
var obj = {};
var currentline = line.split(',');
headers.forEach(function(header, i) {
obj[header] = currentline[i];
});
result.push(obj);
});
return result; //JavaScript object
//return JSON.stringify(result); //JSON
}
console.log(csvJSON(csv))
答案 4 :(得分:0)
首先,您的测试数据没有行定界符-字符串是连续的。这是一些我刚刚汇总在一起即可完成的工作的代码(带有自定义定界符之类的选项)。如果您有任何疑问,请告诉我:
var testData = "FirstName,LastName,dob,phone"+"\n"+
"John,Smith,10/01/1998,21234123"+"\n"+
"Millie,Henderson,23/03/2000,21768345"+"\n"+
"Briana,Wright,23/03/1976,22321467"+"\n";
function csvToJson(data, customOptions) {
// Default options. Override with passed in parameters
var options = {
hasHeaderRow: true,
fieldDelimiter: ",",
rowDelimiter: "\n"
};
if (typeof customOptions === 'object' && customOptions !== null) {
for (var option in customOptions) {
if (options.hasOwnProperty(option)) {
options[option] = customOptions[option];
}
}
}
// Break into rows
var rows = data.split(options.rowDelimiter);
if (rows instanceof Array !== true || rows.length == 0) {
console.log("No rows found or invalid row delimiter.");
return;
}
// Determine field count
var fieldCount = parseInt(rows[0].split(options.fieldDelimiter).length);
// Parse header
if (options.hasHeaderRow == true) {
var headerRow = rows.shift();
} else {
var headerRowPlaceholders = [];
for (var i = 1; i < fieldCount + 1; i++) {
headerRowPlaceholders.push('field'+i);
}
var headerRow = headerRowPlaceholders.join(options.fieldDelimiter);
}
headerRow = headerRow.split(options.fieldDelimiter);
// Convert rows to objects
for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {
var rowObject = {};
var rowData = rows[rowIndex].split(options.fieldDelimiter);
if (rowData.length === fieldCount) {
for (var headerIndex = 0; headerIndex < headerRow.length; headerIndex++) {
rowObject[headerRow[headerIndex]] = rowData[headerIndex];
}
rows[rowIndex] = rowObject;
} else {
rows.splice(rowIndex, 1);
}
}
return rows;
}
var result = csvToJson(testData, {
hasHeaderRow: true,
fieldDelimiter: ",",
rowDelimiter: "\n"
});
console.log(result);