如何在javascript中将字符串解析为函数属性

如何在javascript中将字符串解析为函数属性,javascript,json,serialization,deserialization,Javascript,Json,Serialization,Deserialization,我创建了自定义stringify方法来stringify函数,如下所示 var myStringify=function (obj) { return JSON.stringify(obj, function (key, value) { if (value instanceof Function || typeof value == 'function') { return value.toString(); }

我创建了自定义stringify方法来stringify函数,如下所示

var myStringify=function (obj) {
      return JSON.stringify(obj, function (key, value) {
        if (value instanceof Function || typeof value == 'function') {
          return value.toString();
        }
        return value;
      });
    }
但当我不知道如何将字符串函数解析为函数对象时。 这是我的例子

var parsed=JSON.parse(jsonString);
在处理JSON.parse函数之后,我得到了以下结果

parsed.run字段具有函数字符串

console.log(parsed.run)  // output is "function(){console.log('foo');}"
我希望这个函数字符串返回到已解析对象的属性中

{run:"function(){console.log('foo');}"} 
进入

我该怎么办?

先拿到尸体

var string = parsed.run;
var body = string.substring(string.indexOf("{") + 1, string .lastIndexOf("}"));
现在创建一个新的函数对象并执行

new Function(body)();
您可以在浏览器控制台上尝试一个简单的演示

var string = "function(){console.log('foo');}";
var body = string.substring(string.indexOf("{") + 1, string .lastIndexOf("}"));
new Function(body)(); //outputs foo
将其重构为函数

function convertBodyToFunction(body)
{
   body = string.substring(string.indexOf("{") + 1, string .lastIndexOf("}"));
   return new Function(body);
}
convertBodyToFunction(parsed.run)();

匹配函数字符串的正则表达式:

var parseFunctionString = /^\s*function(\s+[a-z0-9$_]*)?\(([^)]*)\)\s*\{([\s\S]*)\}\s*$/i;
//extended regExp, to handle fat-arrow-notation
//var parseFunctionString = /^\s*(?:function(\s+[a-z0-9$_]*)?\(([^)]*)\)\s*\{([\s\S]*)\}|\(([^)]*)\)\s*=>([\s\S]*)|([a-z0-9$_]+)\s*=>([\s\S]*))\s*$/i;
以及用法:

JSON.parse(input, function(k,v){
    var m = typeof v === "string" && v.match(parseFunctionString);
    if(m){
        return Function(m[2], m[3]);
        //if you include the extended regExp
        //return Function(m[2] || m[4] || m[6], m[3] || "return "+( m[5] || m[7] ));

        //return Function("return " + m[0])();
    }
    return v;
})

“function(){console.log('foo');}”
不是有效的JSON..@RayonDabre,我知道你的意思。我发布的简短说明是:complete is parsed={run:“function(){console.log('foo');}”}。谢谢,为什么会出现这种情况?您想要实现什么?您是否尝试过
eval()
?我想向webworker传递一些对象,并想在webworker内部运行对象函数。若我可以将函数字符串转换回函数,我就可以从webworker运行对象函数。
JSON.parse(input, function(k,v){
    var m = typeof v === "string" && v.match(parseFunctionString);
    if(m){
        return Function(m[2], m[3]);
        //if you include the extended regExp
        //return Function(m[2] || m[4] || m[6], m[3] || "return "+( m[5] || m[7] ));

        //return Function("return " + m[0])();
    }
    return v;
})