将函数解析为Json字符串到Javascript

时间:2015-04-13 09:08:01

标签: javascript json parsing eval

我有一个这样的字符串:

var jsontext = 'function(prog) {return ' + path + ';}';

我希望将其解析为javascript。

我该怎么做?

托马斯

3 个答案:

答案 0 :(得分:0)

这不是JSON,而是Javascript作为您要评估的文本字符串。

您将需要使用eval(jsontext)函数,但我强烈反对这一点,因为它是一个非常危险的函数,因为它使用调用者的权限执行脚本。出于性能原因,这也是一个坏主意。如果可能的话,在脚本本身而不是字符串中定义你的函数!

请参阅here

答案 1 :(得分:0)

这里是完整的代码。 eval功能不起作用,我需要一个解决方法。

function buildRecursiveFilter(filterDef){         var filterFuncs = [];

    // Rekursiv für alle nodes Regex filter funktionen definieren
    naw.visitNode(filterDef, function(node, path) {

        if (typeof node !== "object") {
          var selector = eval("(function(TBM) { return " + path.toUpperCase() + "; })") ;
            var tester = buildRegexFilter(node, selector);         
          filterFuncs.push(tester);
        }
    }, "tbm");

    if (filterFuncs.length === 0) return noFilter;

    // wende alle test funktionen auf tbm an und liefere die UND Verknüpfung
    return function(tbm) {
        return _.reduce(
            _.map(filterFuncs, function(f) { return f(tbm); }),
            function(akku, res) { return akku && res; });
    };
}

function buildRegexFilter(filterDef, fieldSelector) {
    fieldSelector = fieldSelector || (function(tbm) { return tbm.WP; });
    var def = filterDef;
    if (typeof (def) === 'string') {
        def = def.split(',');
    }
    var filters = [].concat(def); // Array erzwingen
    filters = _.map(filters, function(s) { return $.trim(s); });
    var expression = '(' + filters.join('|') + ')';
    var rx = expression !== '(.*)' ? new RegExp(expression) : undefined;

    return function (tbm) {
        return rx.test(fieldSelector(tbm));
    };
}

托马斯

答案 2 :(得分:0)

我找到了解决问题的方法。我已经删除了eval的行并将其替换为:

var fn = "function(tbm) { return " + path.toUpperCase() + "; }";
var selector = new Function("return (" + fn + ")")();

托马斯