0

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>\r\n';

            for (var item in data[row]) {

                html += '<td>' + item + ':' + data[row][item] + '</td>\r\n';

            }

            html += '</tr>\r\n';

        }

    }

    return html;

}

该代码不会产生错误,它在表格中显示我打印的是每个标题一个值,但我想知道如何获得每个标题的多个值?就像header4有几个值一样,我希望单元格中的所有值都用于 header4。或者,如果您能提出任何更好的解析此类数据的方法,我将不胜感激。谢谢!

JSFiddle

http://jsfiddle.net/xpvt214o/685678/

4

2 回答 2

1

所以...现在我明白了你的问题,呵呵。开始了:

            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(你可以在那里阅读)。因此,您可以对溢出案例的这些值做任何您想做的事情。在您的情况下,您想使用最后一个“列标题”作为这些值的标题,对吗?这发生在这条线上:

var item = header[col] ? header[col] : header[header.length-1];

如果该列存在于标题定义中,它将调用标题名称。如果没有,它将调用最后一个标题名称。而已?

于 2018-08-27T13:10:38.117 回答
1

我检查了你的小提琴并制作了一个 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 在每一行上需要等量的元素。

我已经在你的小提琴中测试了这个 csv,它显示了所有元素,但是为第 2 行和第 4 行添加了空的或未定义的元素。

于 2018-08-27T12:58:12.683 回答