我有一个应该解析为JSON的字符串,而不应该转换为Float32Array。 字符串如下所示:
{"vertices":"[-1.0, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0]"}
应该将数组分配给变量,例如:
mesh.vertices = new Float32Array([-1.0, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0]);
如何转换字符串以使数组由浮点数组成? 出于安全原因,我不想使用eval()。
答案 0 :(得分:2)
您可以使用JSON.parse:
mesh.vertices = new Float32Array(JSON.parse(myString).vertices);
这假设你的意思是:
{"vertices":[-1.0, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0]}
如果JSON实际上和你说的那样(哪个FWIW有点奇怪),那就是:
mesh.vertices = new Float32Array(JSON.parse(JSON.parse(myString).vertices));
答案 1 :(得分:1)
使用JSON.parse
安全地解析JSON数据。见https://developer.mozilla.org/En/Using_native_JSON
答案 2 :(得分:0)
我仍然建议您使用本机JSON
解析器(如其他人提到的那样),但这是一个非常简单且有限的实现:
var stringToParse = "{vertices:[-1.0, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0]}";
Object.prototype.simpleParse = function() {
if (!(this instanceof String)) throw "Type mismatch";
var re = /(\w+)[^:]+:\[([^\]]+)\]/g;
var keyvalues = re.exec(this.valueOf());
var key = keyvalues[1];
var values = keyvalues[2].split(",");
var arr = [];
for (val in values) {
var currentValue = (/-?\d+(.\d+)?/).exec(values[val])[0];
arr.push(currentValue);
}
arr.pop();
ret = {};
ret[key] = new Float32Array(arr);
return ret;
}
console.log(stringToParse.simpleParse());