2013-08-22 51 views
1

我的csv文件如下:JSON对象从CSV

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

当下面的代码执行,我得到{}作为警报,而不是JSON对象。 我想要的输出应该是下面的格式JSON文件:

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

CODE:

<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> 

回答

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); 

} 
+0

我的CSV文件.csv格式,而不是像这样一串代码。我怎么可以在这里给csv的路径而不是给字符串 – Aquarius24

+0

@ Aquarius24我已经更新了关于您的需求的代码。 – amorbytes

+0

@amorbytes ....是它按照要求:) – Aquarius24

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对象,使用我上面提到的。如果你想要的文本行的数组,你在做什么,但更换阵列

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>