2012-03-06 60 views
1

我有一个字符串应该被解析为JSON,并且应该被转换为Float32Array。 字符串看起来是这样的:将字符串转换为Javascript中的键入数组

{"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

你的意思是解析* as *或* from * JSON *即你有JSON,你想把它转换成一个JavaScript对象。 – 2012-03-06 15:18:54

+0

可能重复的[如何在JavaScript中解析json](http://stackoverflow.com/questions/4935632/how-to-parse-json-in-javascript) – 2012-03-06 15:19:27

回答

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)); 
+0

谢谢!按照您的建议,我将使用{“vertices”:[ - 1.0,-1.0,-1.0,-1.0,-1.0,0.0,1.0,-1.0,0.0]}。 – maria90 2012-03-06 15:33:57

+0

“[array,items]”有很好的理由。它使json在使用simplejson和python时可读。在一行或一列中有10,000个项目会有所不同。 – noiv 2012-05-21 22:49:11

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()); 

演示:http://jsfiddle.net/mKWGH/