从简单的3行CSV获取Javascript数据的最佳方法

时间:2011-09-16 01:11:24

标签: javascript json csv

我有一个简单的CSV(使用JQuery的$.ajax从同一网站上的/data/league.csv导入),其格式为三行:

"Kimberlin Library","Queen's Building","Innovation Centre","etc etc"
8,2,0,-2
1,0,-1,0

我想进入这种格式(使用buildingpercent作为Highcharts中xy轴的数据,并使用所有三种填充列表):

var leaguetable = {
    building: ["Kimberlin Library","Queen's Building","Innovation Centre","etc etc"],
    percent: [8,2,0,-2],
    change: [1,0,-1,0]
};
尽管尝试了其他人的方法(包括split(/\r\n|\n|r/),搜索/^(.*)$/m)和this question),但我仍然在绘制一个空白,但是我一直在画空白。我需要一些尽可能简单的东西,无论是JQuery还是纯Javascript。对于类似的问题,我最终将文件转换为JSON,但如果可能,我想避免这种情况。

2 个答案:

答案 0 :(得分:1)

试试这个。它将通过下面代码中的正则表达式模式处理简单的CSV,单引号或双引号CSV。你必须调整processCSV()的结束才能做你想做的事情,因为我只是将物体放回空气中。

$(document).ready(function() {
    $.ajax({
        type: "GET",
        url: "my_csv.txt",
        dataType: "text",
        success: function(data) {processCSV(data);}
     });
 });

function processCSV(allLines) {
    var allLinesArray = allLines.split(/\r\n|\n/);
    var leaguetable = { 'building': [], 'percent': [], 'change': [] };
    var pattern = /([^,'"]*"[^"]*"[^,'"]*)|([^,'"]*'[^']*'[^,'"]*)|([^,"']*)/ig;
    var fieldValues;

    for (var i=0; i<allLinesArray.length; i++) {
        fieldValues = allLinesArray[i].match(pattern);
        if (fieldValues) {
            for (var j=0; j<fieldValues.length; j++) {
                // if begins with single- or double-quote, strip specified quotes
                if (fieldValues[j].charAt(0) === '"' || fieldValues[j].charAt(0) === "'") {
                    fieldValues[j] = fieldValues[j].replace(fieldValues[j].substr(0,1), "");
                }
            }
            // I'll trust your CSV to have the right number of fields, but...
            // you may want to build some validation in before doing the next 3 lines
            leaguetable.building.push(fieldValues[1]);
            leaguetable.percent.push(fieldValues[2]);
            leaguetable.change.push(fieldValues[3]);
        }
    }
    return leaguetable;
}

答案 1 :(得分:0)

假设您的CSV很简单,您可能希望执行以下操作:

  1. 将数据拆分为行。
  2. 迭代线条:
    1. 用逗号分隔该行。
    2. 将第一部分附加到building数组。
    3. 在使用percent解析后,将第二部分附加到parseInt数组。
    4. 对第三部分和change数组执行相同的操作。