我正在使用jquery.csv
来解析csv文件并以表格格式显示数据。
我的 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>rn';
for (var item in data[row]) {
html += '<td>' + item + ':' + data[row][item] + '</td>rn';
}
html += '</tr>rn';
}
}
return html;
}
该代码不会生成错误,并且在表中显示我打印的每个标题一个值,但我想知道如何为每个标题获取多个值?就像header4
一样,有几个值,我希望 header4 单元格中的所有值。 或者,如果您能建议任何更好的方法来解析此类数据,我将不胜感激。谢谢!
JSFiddle
http://jsfiddle.net/xpvt214o/685678/
所以...现在我明白了你的问题,呵呵。来吧:
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>rn';
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>rn';
}
html += '</tr>rn';
}
return html;
}
$.ajax({
type: "GET",
url: "test.csv",
dataType: "text",
success: function(response) {
$('#result').html(generateTable($.csv.parsers.splitLines(response)));
}
});
你不能只使用默认解析器做你想做的事。因此,您应该使用$.csv.parsers.splitLines
助手创建自己的解析器(您可以在那里阅读有关此内容的信息(。 因此,您可以对溢出案例的这些值执行任何操作。在您的情况下,您想使用最后一个"列标题"作为这些值的标题,对吗? 这发生在这条线上:
var item = header[col] ? header[col] : header[header.length-1];
如果标头定义中存在该列,它将调用标头名称。如果没有,它将调用最后一个标头名称。就是这样?
我检查了你的小提琴并制作了一个控制台.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 解析器在每行上需要等量的元素。
我已经在您的小提琴中测试了这个 csv,它显示了所有元素,但为第 2 行和第 4 行添加空的或未定义的元素。