javascript - 将 CSV 文件解析为 Javascript 数组具有引号中的键之一

标签 javascript

我正在尝试将 CSV 文件解析为 Javascript 数组,但遇到了一个让我有点难过的问题。

虽然其余对象在没有引号的情况下被解析,其中一个键在引号中但是当我尝试 Object[key] 时我得到一个异常

Uncaught SyntaxError: Invalid or unexpected token

除了“信息”之外,我能够读取所有其他键。

我的对象看起来像这样:

Object {LGA_NAME: "DANDENONG", Lat: "-37.98862", Long: "145.21805", "Information
": "something crashed
"}

有问题的 CSV 文件是

https://dl.dropboxusercontent.com/u/97162408/crashdata.csv

我用来解析CSV文件的函数是

    function csvToArray(csvString) {

        // The array we're going to build
        var csvArray = [];
        // Break it into rows to start
        var csvRows = csvString.split(/\n/);

        // Take off the first line to get the headers, then split that into an array
        var csvHeaders = csvRows.shift().split(',');

        // Loop through remaining rows
        for (var rowIndex = 0; rowIndex < csvRows.length; ++rowIndex) {
            var rowArray = csvRows[rowIndex].split(',');

            // Create a new row object to store our data.
            var rowObject = csvArray[rowIndex] = {};

            // Then iterate through the remaining properties and use the headers as keys
            for (var propIndex = 0; propIndex < rowArray.length; ++propIndex) {
                // Grab the value from the row array we're looping through...
                var propValue = rowArray[propIndex];
                // ...also grab the relevant header (the RegExp in both of these removes quotes)
                var propLabel = csvHeaders[propIndex];

                rowObject[propLabel] = propValue;
            }
        }
        return csvArray;
    }

最佳答案

问题在于您拆分字符串以获取行的方式。在 *NIX 系统中,换行符为 \n,但在 Windows 中换行符为 \r\n。因为 CSV 文件遵循 Windows 约定并且您仅使用 \n 拆分行,所以最后一个键实际上是 "Information\r"

您可以通过将 var csvRows = csvString.split(/\n/); 替换为 var csvRows = csvString.split(/\n|\r\n/); 这样,您将能够解析使用任一换行约定的 CSV 文件。

关于javascript - 将 CSV 文件解析为 Javascript 数组具有引号中的键之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37692230/

相关文章:

javascript - 基本的 JavaScript 问题

javascript - 需要在 JS 中的每次鼠标悬停时逐渐提高 div 不透明度属性

javascript - 为什么 CssMinimizerWebpackPlugin 会阻止我的主 js 文件被缩小?

javascript - Spread Syntax 创建的是浅拷贝还是深拷贝?

javascript - 如何处理依赖于多个其他异步函数的异步函数

javascript - 在图像加载时将图像从零放大到完整尺寸

javascript - AngularJs:当放置在 ng-view 标签内时,ng-include 不起作用

javascript - 失败后重新启动 Promise

javascript - 即使质量为 100,Cordova 相机 getPicture 也是无损压缩

javascript - PHP 中使用多个复选框进行过滤