从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 };