javascript - eval() 的替代品

标签 javascript json object eval

我一直在使用 eval,它在一个网络浏览器中有效,但在另一个网络浏览器中无效(这些不是您的标准浏览器,而是与另一个应用程序集成的浏览器)。在一个我的 300 多个项目的对象中被正确处理。另一方面,它处理从 256 到末尾的项目,但跳过前 255 个! JSON 也是正确的。评估的任何替代方案?也许是一个 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;
}

谢谢

最佳答案

关于javascript - eval() 的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6060732/

相关文章:

javascript - 使用 Javascript 和 CSS 在鼠标悬停时突出显示表格的行

java - Android - 将自定义模型ArrayList保存到JSON

javascript - 在meteor-jasmine中测试router.go的点击事件

javascript - 如何在 Javascript 中创建可排序、拖放的多级列表

javascript - 向页面添加大量元素时性能不佳

php - 我需要从 mysql 数据库中获取数据并将其放入 json 数组并将 json 数组用于文本框自动完成

javascript - 如何使用 JavaScript 将一些 JSON 加载到我的 Web 应用程序中并选择随机单词?

高阶函数中的 Javascript 对象克隆

网格中的 Python 对象

javascript - 如何在 Javascript 构造函数中使用 boolean 值?