Преобразовать строку в типизированный массив в Javascript - PullRequest
1 голос
/ 06 марта 2012

У меня есть строка, которая должна быть проанализирована в 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 ().

Ответы [ 3 ]

2 голосов
/ 06 марта 2012

Вы можете использовать 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 голос
/ 06 марта 2012

Используйте JSON.parse для безопасного анализа данных JSON.Смотри https://developer.mozilla.org/En/Using_native_JSON

0 голосов
/ 06 марта 2012

Я все еще предлагаю вам использовать собственный синтаксический анализатор 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/

...