Альтернативы eval () - PullRequest
1 голос
/ 19 мая 2011

Я использую eval, который работает в одном веб-браузере, но не в другом (это не ваши стандартные браузеры, а интегрированные с другим приложением).В одном мой объект из 300+ предметов обрабатывается правильно.В операторе он обрабатывает элементы от 256 до конца, но пропускает первые 255!JSON также верен.Есть ли альтернативы eval?возможно, функция jsonToObject.Сейчас я пишу свои собственные, но сейчас у меня серьезные временные ограничения, и я надеялся, что мне не пришлось изобретать велосипед.

Какие-нибудь идеи или функции?

Очень ценится

Пока у меня есть это, я собирался попытаться основать его на обратной полировке.Не уверен, что это наиболее эффективно, но по некоторым причинам это казалось интересным испытанием.Часть меня сворачивается к давлению того времени, которое у меня есть, и поэтому мне нужно быть реалистичным и спросить, есть ли какие-либо методы, которые уже могут быть использованы со мной.

var operatorStack = new Array();
var variableStack = new Array();
var valueStack = new Array();
var objectStack = new Array();

object.prototype.toJSON = function(){

}

function json(str){
    this.value = str
}

/*
    ({"0":"Zero","1":{"A":"1","B":"2"},"2":{"C":"3","D":"4"},"3":{"E":"5","F":"^"}})
*/

json.prototype.toObject = function(){
    var str = this.value;
    var vbl = "";
    var vlu = "";
    for(var i = 0; i < str.length; i++){
        var chr = str.charAt(i);
        switch(chr){
            case '{': //new Object();
                objectStack.push = new Object();
                operatorStack.push(chr);
                break;
            case '}': //close Object();
                operatorStack.pop();
                if(operatorStack[operatorStack.length-1] == ':'){
                    objectStack[objectStack.length-2][vbl] = objectStack[objectStack.length-1];
                }else{
                    return obj;
                }
                break;
            case '"':
                if(operatorStack[operatorStack.length-1] == '"'){
                    operatorStack.pop();
                    if(operatorStack[operatorStack.length-1] != ':'){
                        objectStack[objectStack.length-1][vbl] = val;
                        vbl = "";
                        val = "";
                        operatorStack.pop();
                    }else if(operatorStack[operatorStack.length-1] != ','){
                        operatorStack.pop();
                    }
                }else{
                    operatorStack.push(chr);
                }
                break;
            case ':':
                operatorStack.push(chr);
                break;
            case ',':
                operatorStack.push(chr);
                break;
            default:
                if(operatorStack[operatorStack.length-1] == '"'){
                    switch(operatorStack[operatorStack.length-2]{
                        case '{': //we know it's a variable
                            vbl += chr;
                            break;
                        case ',': //we know it's a variable
                            vbl += chr;
                            break;
                        case ':': //we know it's a value
                            val += chr;
                            break;
                    }
                }else{
                    alert("JSON not formed properly, alphanumerics not within quotes.")//JSON not formed properly
                }
                break;
        }
    }
    return obj;
}

Спасибо

Ответы [ 2 ]

6 голосов
/ 19 мая 2011
2 голосов
/ 19 мая 2011
...