在json中传递函数并执行

时间:2010-10-15 23:57:22

标签: javascript jquery json observer-pattern

有没有办法可以将函数作为json字符串传递(使用JSON.stringify进行转换),将其发送到另一个函数,解析json然后执行json中的函数?我正在使用jquery和javascript。

7 个答案:

答案 0 :(得分:49)

是的,你可以。有很多方法可以做到这一点。

并且没有必要使用“邪恶”评估函数(请yahoogle为什么应该避免它),如下所示:http://javascript.about.com/library/bleval.htm

var tmpFunc = new Function(codeToRun);
tmpFunc(); 

在任何阶段是否都是JSON应该是无关紧要的。

答案 1 :(得分:22)

这是一个有效的example

基本上,你必须小心这种事情。如果您使用现有的javascript函数,将其转换为字符串,并对其进行评估,则可能会遇到函数重新声明问题。如果您只是从服务器中获取一个函数字符串并且想要运行它,那么您可以像我在那个jsfiddle上那样做:

<强>的Javascript

var myFunc = "function test() {alert('test');}";

$(document).ready(function() {
    var data = new Object();
    data.func = myFunc;
    var jsonVal = $.toJSON(data);
    var newObj = $.evalJSON(jsonVal);
    eval(newObj.func);
    test();
});​

答案 2 :(得分:19)

是的,您可以使用toString()方法将函数转换为字符串。

Here's an example显示将函数转换为字符串并返回函数:

var myfunc = function () {
    alert('It works!');
}

var as_string = myfunc.toString();

as_string = as_string.replace('It works', 'It really works');

var as_func = eval('(' + as_string + ')');

as_func();

答案 3 :(得分:4)

查看 JSONfn 插件。

http://www.eslinstructor.net/jsonfn/

它完全符合您的要求。

-Vadim

答案 4 :(得分:3)

我创建了一个JSONfn的分支,它使您能够对对象及其原型进行字符串化和解析。在我的基本测试中它运行良好。

https://github.com/cgarciae/jsonfn

答案 5 :(得分:0)

我发现在处理JSON文件中的函数时使用JavaScript call()函数很有帮助。

var returnData = theJsonData.theFunction.call();
console.log(returnData); // prints any return data

我希望能对任何人留下帮助!

答案 6 :(得分:-8)

不,你不能这样做。函数不能是JSON序列化的。您可以直接将其传递给另一个函数,而无需将对象转换为JSON,而无需调用JSON.stringify。