从CSV创build对象

我想要做的是dynamic的属性dynamic创build一个对象文字。

我有一个包含文件内容(CSV格式)的数组。

每个元素是一行(内容是用/\r?\n/分隔的)。

该数组的第一个元素(第一行)包含我想要的对象文本的参数,用逗号分隔。

所有其他元素都是在第一行中设置的参数的值(仍然是CSV格式)。

我现在的代码如下:

 function jsonDataArray(array) { var jsonResult = [], parameters = [], values; for(var i=0; i < array.length; i++) { if(i === 0) { var parameters = array[i].split(','); var objJSON = {}; for(var k=0; k < parameters.length; k++) { objJSON.eval(parameters[k]); } continue; } values = array[i].split(',') for(var j=0; j < objJSON.length; j++) { objJSON[j] = values; } jsonResult.push(objJSON); } return jsonResult; } 

现在,当我在节点中启动这个代码时, objJSON.eval(parameters[k])行似乎是问题所在,但我无法解决问题。

所以基本上我的问题如下:

  • 我应该如何继续将第一行的参数设置为JSON对象的参数+填充其他行的值?

  • parsing新行是否安全: /\r?\n/

预先感谢您的帮助 !

编辑:我错误地使用术语JSON的意思是对象字面,所以我纠正了这个问题。 我没有修改这个函数,所以我不会在代码中误添加错误。

它在我看来你想要一个对象数组,每个对象有第一行(标题)的键。

以下代码假设您已经通过\r?\n将csv分解为每行

 (function() { var csv = []; csv.push('name,age,gender'); csv.push('jake,13,m'); csv.push('sarah,15,f'); csv.push('john,18,m'); csv.push('nick,13,m'); console.log(csv); function jsonDataArray(array) { var headers = array[0].split(','); var jsonData = []; for ( var i = 1, length = array.length; i < length; i++ ) { var row = array[i].split(','); var data = {}; for ( var x = 0; x < row.length; x++ ) { data[headers[x]] = row[x]; } jsonData.push(data); } return jsonData; } console.log(jsonDataArray(csv)); })(); 

http://jsbin.com/igiwor/2/edit

这将产生如下的东西:

 [{ name="jake", age="13", gender="m"}, { name="sarah", age="15", gender="f"}, { name="john", age="18", gender="m"}, { name="nick" age="13", gender="m"}] 

这是我的CSVparsing函数,我希望它可以帮助:

 function parseCSV(input) { var rows = input.split(/\r?\n/); var keys = rows.shift().split(","); return rows.map(function(row) { return row.split(",").reduce(function(map, val, i) { map[keys[i]] = val; return map; }, {}); }); } 

我应该如何继续将第一行的参数设置为JSON对象的参数+填充其他行的值?

只是循环的值。 然后,将values[i]添加到object的关键字是parameters[i] 。 在我的版本是线map[keys[i]] = val;

parsing新行是否安全: /\r?\n/

我想是的。

我想你可以说下面的,但我不知道什么<somevalue>应该是。

  objJSON[parameters[k]] = <somevalue>; 

无论如何,请考虑以下事项,

 var anObj = {}; anObj["a1"] = "sam"; anObj["a2"] = 5; 

这是一样的

 var anObj = { a1 : "sam", a2 : 5 };