我尝试做的是动态创建动态属性的对象文字。
我有一个包含文件内容(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对象的参数+填充其他行的值?
使用此解析新行是否安全:/\r?\n/
?
提前感谢您的帮助!
编辑:我错误地使用术语JSON来表示对象文字,所以我更正了问题。我没有修改这个功能,所以我不会错误地在代码中添加错误。
答案 0 :(得分:3)
在我看来,你想要一个对象数组,每个对象都有第一行(标题)中的键。
以下代码假设您已通过\r?\n
(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"}]
答案 1 :(得分:3)
这是我的CSV-parse功能,我希望它有所帮助:
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;
用这个来解析新行是否安全:
/\r?\n/
?
我想是的。
答案 2 :(得分:1)
我认为您可以说以下内容,但我不确定<somevalue>
应该是什么。
objJSON[parameters[k]] = <somevalue>;
无论如何,请考虑以下内容,
var anObj = {};
anObj["a1"] = "sam";
anObj["a2"] = 5;
这与
相同var anObj = { a1 : "sam", a2 : 5 };