将包含JS函数定义的JSON转换为JavaScript对象

时间:2013-08-26 13:14:00

标签: javascript json

如何转换包含JS函数定义的JSON

{  
    "a1": "5",  
    "b1": "10",  
    "c1": "function(param1,param2) { return param1 +param2}"  
}

到包含这些函数的JavaScript对象(而不是带有定义的字符串):

{  
    a1: 5,  
    b1: 10,  
    c1: function(param1,param2) { return param1 + param2}  
}

4 个答案:

答案 0 :(得分:2)

您可以将 reviver功能传递给JSON.parse。这允许您将自定义逻辑应用于已分析的值。

在此功能中,您可以测试值是否以模式function(...) {开始:

var obj = JSON.parse(str, function(k, v) {

    if (/^\s*function\s*\([^)]*\)\s*{/.test(v)) {
        try {
            // using the Function constructor to evaluate the function
            // definition in global scope
            return Function('return ' + v)();
        }
        catch() {
            return v; // maybe not a JS function definition after all
        }
    }
    return v;
});

DEMO

当然,您也可以迭代生成的对象并在解析后应用相同的逻辑,但如果您有嵌套的对象/数组,则使用reviver函数会更容易。

请注意,这是一个非常简单的测试,仅适用于匿名函数。如果已命名函数,则必须相应地调整表达式。但这是基本的想法。

答案 1 :(得分:0)

使用JS函数JSON.parse

var myobj = JSON.parse("{\"a1\": \"5\",  \"b1\": \"10\",  \"c1\": \"function(param1,param2) { return param1 +param2}\"  }");

答案 2 :(得分:0)

两步:解析json,并将函数源代码提升为函数:

var jsonObj = JSON.parse(jsonFromAjax);
jsonObj.c1 = eval(jsonObj.c1);

答案 3 :(得分:-1)

这是一个将包含函数的json字符串转换回具有有效函数声明的json对象的示例。

var jsonstring =" {\" schema \":{\" title \":\" User Feedback \",\ "说明\":\"所以\",\"输入\":\"对象\",\&# 34;特性\":{\"名称\":{\"类型\":\"串\"}}}, " +                         " \"选项\":{\"表格\":{\"属性\":{},\"按钮\":{\"提交\":{\"标题\":\"它\",\"单击\":\"()的函数{警报('你好&#39);} \" }}}}}&#34 ;;

var jsonData = JSON.parse(jsonstring);

function Iterate(data)
{
      jQuery.each(data, function (index, value) {
        if (typeof value == 'object') {
            Iterate(value);
        }
        else {
            if (value.indexOf("function()") > -1)
                data[index] = eval("(" + value + ")");
        }
    });

};

Iterate(jsonData);

在这种情况下 jsonData.options.form.buttons.submit.click();