JQuery-csv 未解析所有值
JQuery-csv not parsing all values
我正在使用 jquery.csv
解析 csv 文件并以 table 格式显示数据。
我的 csv 文件数据:test.csv
header1, header2, header3, header4
value1, value2, value3, value4
value1, value2, value3, value4.1,value4.2,value4.3
value1, value2, value3, value4
我的代码:index.html
var data;
$.ajax({
type: "GET",
url: "test.csv",
dataType: "text",
success: function(response) {
data = $.csv.toObjects(reponse);
// generating the table for user view
generateTable(data);
var html = generateTable(data);
$('#result').html(html);
}
});
function generateTable(data) {
var html = '';
if (typeof(data[0]) === 'undefined') {
return null;
}
if (data[0].constructor === Object) {
for (var row in data) {
html += '<tr>\r\n';
for (var item in data[row]) {
html += '<td>' + item + ':' + data[row][item] + '</td>\r\n';
}
html += '</tr>\r\n';
}
}
return html;
}
代码没有产生错误,它在 table 中显示我打印的是每个 header 的一个值,但我想知道我怎样才能得到每个 [=31] 的多个值=]?与 header4
一样,有多个值,我希望 header4 的单元格中包含所有值。
或者,如果您能提出任何更好的解析此类数据的方法,我将不胜感激。谢谢!
JSFiddle
我检查了你的 fiddle 并做了一个 console.log 让我打印出你解析的 csv 对象。
它打印的变量没有第 3 行的最后两项。您的问题是 csv 解析器删除了这些项目。
我认为这是由于您不正确的 csv 造成的。
您应该像这样添加您的 csv 以使其正确解析:
header1, header2, header3, header4,header4.2,header4.3
value1, value2, value3, value4,,
value1, value2, value3, value4.1,value4.2,value4.3
value1, value2, value3, value4,,
我认为 csv-parser 在每一行上需要等量的元素。
我已经在您的 fiddle 中测试了这个 csv,它显示了所有元素,但为第二行和第四行添加了空的或未定义的元素。
所以……我明白你的问题了,呵呵。我们开始吧:
function generateTable(lines) {
if (typeof(lines) === 'undefined' || lines.length == 0) {
return '';
}
var header = lines[0].split(',');
var html = '';
for (var row in lines) {
if(row == 0) {
continue;
}
html += '<tr>\r\n';
var cols = lines[row].split(',');
for (var col in cols) {
var item = header[col] ? header[col] : header[header.length-1];
html += '<td>' + item + ':' + cols[col] + '</td>\r\n';
}
html += '</tr>\r\n';
}
return html;
}
$.ajax({
type: "GET",
url: "test.csv",
dataType: "text",
success: function(response) {
$('#result').html(generateTable($.csv.parsers.splitLines(response)));
}
});
您不能只使用默认解析器来做您想做的事。所以你应该用 $.csv.parsers.splitLines
帮助器创建你自己的解析器(你可以阅读 there)。
因此,您可以对溢出案例的这些值做任何您想做的事情。在您的情况下,您想使用最后一个 "column header" 作为这些值的 header,对吗?
这是在这条线上发生的:
var item = header[col] ? header[col] : header[header.length-1];
如果该列存在于 header 定义中,它将调用 header 名称。如果没有,它将调用最后的 header 名称。就这样了?
我正在使用 jquery.csv
解析 csv 文件并以 table 格式显示数据。
我的 csv 文件数据:test.csv
header1, header2, header3, header4
value1, value2, value3, value4
value1, value2, value3, value4.1,value4.2,value4.3
value1, value2, value3, value4
我的代码:index.html
var data;
$.ajax({
type: "GET",
url: "test.csv",
dataType: "text",
success: function(response) {
data = $.csv.toObjects(reponse);
// generating the table for user view
generateTable(data);
var html = generateTable(data);
$('#result').html(html);
}
});
function generateTable(data) {
var html = '';
if (typeof(data[0]) === 'undefined') {
return null;
}
if (data[0].constructor === Object) {
for (var row in data) {
html += '<tr>\r\n';
for (var item in data[row]) {
html += '<td>' + item + ':' + data[row][item] + '</td>\r\n';
}
html += '</tr>\r\n';
}
}
return html;
}
代码没有产生错误,它在 table 中显示我打印的是每个 header 的一个值,但我想知道我怎样才能得到每个 [=31] 的多个值=]?与 header4
一样,有多个值,我希望 header4 的单元格中包含所有值。
或者,如果您能提出任何更好的解析此类数据的方法,我将不胜感激。谢谢!
JSFiddle
我检查了你的 fiddle 并做了一个 console.log 让我打印出你解析的 csv 对象。 它打印的变量没有第 3 行的最后两项。您的问题是 csv 解析器删除了这些项目。 我认为这是由于您不正确的 csv 造成的。
您应该像这样添加您的 csv 以使其正确解析:
header1, header2, header3, header4,header4.2,header4.3
value1, value2, value3, value4,,
value1, value2, value3, value4.1,value4.2,value4.3
value1, value2, value3, value4,,
我认为 csv-parser 在每一行上需要等量的元素。
我已经在您的 fiddle 中测试了这个 csv,它显示了所有元素,但为第二行和第四行添加了空的或未定义的元素。
所以……我明白你的问题了,呵呵。我们开始吧:
function generateTable(lines) {
if (typeof(lines) === 'undefined' || lines.length == 0) {
return '';
}
var header = lines[0].split(',');
var html = '';
for (var row in lines) {
if(row == 0) {
continue;
}
html += '<tr>\r\n';
var cols = lines[row].split(',');
for (var col in cols) {
var item = header[col] ? header[col] : header[header.length-1];
html += '<td>' + item + ':' + cols[col] + '</td>\r\n';
}
html += '</tr>\r\n';
}
return html;
}
$.ajax({
type: "GET",
url: "test.csv",
dataType: "text",
success: function(response) {
$('#result').html(generateTable($.csv.parsers.splitLines(response)));
}
});
您不能只使用默认解析器来做您想做的事。所以你应该用 $.csv.parsers.splitLines
帮助器创建你自己的解析器(你可以阅读 there)。
因此,您可以对溢出案例的这些值做任何您想做的事情。在您的情况下,您想使用最后一个 "column header" 作为这些值的 header,对吗?
这是在这条线上发生的:
var item = header[col] ? header[col] : header[header.length-1];
如果该列存在于 header 定义中,它将调用 header 名称。如果没有,它将调用最后的 header 名称。就这样了?