javascript - 在 JavaScript 中将 CSV 记录解析为对象数组

标签 javascript arrays csv filereader

我是 JS 新手,并且在正则表达式中没有太多经验来进行字符串操作。

这是我的 CSV 文件,其中包含表格形式的记录,第一行作为标题,从下一行开始将显示值:

Name  City   Country
John  Chennai IN
Ken   Brisban AUS
Ben   NY      US

我需要像这样的对象数组中的输出:

[
{Name: 'John',City: "Chennai",Country:"IN"}
{Name: 'Ken',City: "Brisbane",Country:"AUS"}
{Name: 'Ben',City: "NY",Country:"US"}
]

我正在上传 CSV 文件,需要将这些记录保存到数据库中 下面是我上传 CSV 后将触发的代码块,我尝试使用以下方法解析 CSV 记录:

        $scope.processFiles = function() {
            //var input = document.getElementById("fileOutput");
            var input = document.querySelector('input[type = "file"]')
            var file = input.files[0];
            var reader = new FileReader();
            var output;
            reader.onload = function (e) {
                var csvToText = e.target.result;
                output = csvToJSON(csvToText);
                console.log(output);
            };
            reader.readAsText(file);
            event.preventDefault();
        }

        function csvToJSON(csv) {
            var lines = csv.split("\n");
            var result = [];
            var headers;
            for (var i = 0; i < lines.length; i++) {
                headers = lines[i].split("\n");
            }
            var cont = 0;
            for (var i = 0; i < lines.length; i++) {

                var obj = {};
                var currentline = lines[i].split("\n");
                for (var j = 0; j < headers.length; j++) {
                    obj[cont] = currentline[j];
                }
                cont++;
                result.push(obj);
            }
            console.log(result);
            //console.log(JSON.stringify(result));

            //return result;
        }

我得到的输出如下,即值显示在带有逗号分隔符的一行中,并且第四个数组元素不应该显示。

0: {0: "Name,City,Country"}
1: {1: "John,Chennai,IN"}
2: {2: "Ken,Brisbane,AUS"}
3: {3: "Ben,NY,USA"}
4: {4: ""}

最佳答案

我已经更正了您的函数,以所需的格式返回输出:

function csvToJSON(csv) {
    var lines = csv.split("\n");
    var result = [];
    var headers;
    headers = lines[0].split(",");

    for (var i = 1; i < lines.length; i++) {
        var obj = {};

        if(lines[i] == undefined || lines[i].trim() == "") {
            continue;
        }

        var words = lines[i].split(",");
        for(var j = 0; j < words.length; j++) {
            obj[headers[j].trim()] = words[j];
        }

        result.push(obj);
    }
    console.log(result);
}

关于javascript - 在 JavaScript 中将 CSV 记录解析为对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59016562/

相关文章:

javascript - Dc.js 传单标记弹出窗口显示来自输入数据的字段

javascript - Visual Studio Code 'const' 只能在 .ts 文件中使用

javascript - 我有一个不同 ID 的数组,我想从每个 ID 中获取数据。是否可以?

javascript - 前几次浏览器执行 setTimeout() 的时间不到 4 毫秒

C++ 使 char 数组在输入时识别空格

php - 查找坐标是否在区域内

java - 向数组添加一个值?

php - 使用 PHP 将大型 CSV 文件导入 MySQL 数据库并检查重复项

python - 读取多个 csv 文件并将文件名添加为 Pandas 中的新列

c# - 如何向datagridview添加过滤器