我的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 :(得分:1)
您正在尝试将单个字符串值推送到数组,而不是将键值对推送到对象。所以不要将tar作为数组,而是将其作为一个对象。因此,您需要使用index而不是使用push。另一个问题是,行永远不会包含项,这些项应该是您的数组。
$(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对象,请使用我上面提到的内容。如果你想要一个文本行数组,做你正在做的事情,但用数组替换对象
答案 1 :(得分: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);
}
答案 2 :(得分: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>