2013-08-22 72 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>