1

我的 csv 文件如下:

NAME,AGE
"John","23"
"BOB","24"

执行下面的代码时,我得到{} 的是警报而不是 JSON 对象。我的预期输出应该是以下格式的 JSON 文件:

{
    "items": [
        {
            "NAME": "John",
            "AGE": " 23"
        },
        {
            "NAME": "BOB",
            "AGE": "24"
        },
    ]
}

代码:

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
        <script type="text/javascript" src="json.js"></script>
<script type="text/javascript" src="json2.js"></script>
<script type="text/javascript">
  var lines = {};
$(document).ready(function() {
    $.ajax({
        type: "GET",
        url: "data.csv",
        dataType: "csv",
        success: function(data) {processData(data);}
     });
});

function processData(allText) {
    var allTextLines = allText.split(/\r\n|\n/);
    var headers = allTextLines[0].split(',');


    for (var i=1; i<allTextLines.length; i++) {
        var data = allTextLines[i].split(',');
        if (data.length == headers.length) {

            var tarr = [];
            for (var j=0; j<headers.length; j++) {
                tarr.push(headers[j]+":"+data[j]);
            }
            lines.push(tarr);
        }
    }
    alert(lines);
}


var val = JSON.stringify(lines);

alert(val);
</script>
</head>
<body>

</body>
</html>
4

3 回答 3

1

您正在尝试将单个字符串值推送到数组,而不是将键值对推送到对象。因此,与其将 tarr 设为一个数组,不如将其设为一个对象。因此,您需要使用按索引分配而不是使用推送。另一个问题是行永远不会包含项目,这应该是你的数组。

$(document).ready(function() {
    $.ajax({
        type: "GET",
        url: "data.csv",
        dataType: "csv",
        success: function(data) {processData(data);}
    });
});

function processData(allText) {
    var lines = {};
    var items = [];
    var allTextLines = allText.split(/\r\n|\n/);
    var headers = allTextLines[0].split(',');


    for (var i=1; i<allTextLines.length; i++) {
        var data = allTextLines[i].split(',');
        if (data.length == headers.length) {

            var tarr = {};
            for (var j=0; j<headers.length; j++) {
                tarr[headers[j]] = data[j];
            }
            items.push(tarr);
        }
    }
    lines.items = items;
    alert(lines);
}

编辑:重读它,如果你想要实际的 javascript 对象,请使用我上面的内容。如果你想要一个文本行数组,做你正在做的事情,但是用数组替换对象

于 2013-08-22T04:48:36.147 回答
0
/*NAME,AGE"John","23""BOB","24"*/
var mvJSON = {};
var myCSV;
var myJSON_str = '{"items":[]}';
var resJSON_str = "";

//*** Edit
$.get("yourcsvfilepath.csv",function(data){
    // coopy file content of csv to variable
    myCSV = data;
    console.clear();processData(myCSV); 
});
//*** Done Edit





function processData(allText) {

    var items = allText.split(',');
    var keys = [items[0],items[1]];
    var items_str = "";

        for(var i = 2; i< items.length;i = i+2){
            items_str += (i==2) ? '{"'+keys[0]+'":'+items[i]+',"'+keys[1]+'":'+items[i+1]+'}' : ',{"'+keys[0]+'":'+items[i]+',"'+keys[1]+'":'+items[i+1]+'}';     
        }

        items_str = items_str.replace("\n","");
        items_str = items_str.replace("\r","");    
        resJSON_str = myJSON_str.substring(0,myJSON_str.length-2)+items_str+myJSON_str.substring(myJSON_str.length-2,myJSON_str.length);
        alert(resJSON_str);

}
于 2013-08-22T07:03:30.083 回答
0

您可以使用Alasql库在一行中完成所有这些操作。以下脚本可以从服务器加载数据文件,对其进行解析并将结果放入 JSON 对象数组:

<script src="alasql.min.js"></script>
<script>
    alasql('SELECT NAME, AGE FROM CSV("items.csv",{headers:true})',[],function(res){
        var data = {items:res};
    });
</script>
于 2014-12-17T08:42:11.860 回答