我将此代码存储为字符串:
{
"func": function (field) {
var date = getDate(field);
return date != -1;
},
"somethingElse": "Message",
"somethingElse2": "Message2"
}
有没有办法将它转换为对象? JSON.parse不允许使用函数。
答案 0 :(得分:2)
正如Durendal
已经说过的那样,你必须将你的函数作为一个字符串提供,可由JSON.parse
处理。之后,您可以使用eval
调用您的函数:
var string = '{"func":"function (field) {return field;}","somethingElse": "Message","somethingElse2":"Message2"}';
var jsonObject = JSON.parse(string);
var func = eval("("+jsonObject["func"]+")");
document.write(func("abc"));

您可能也对此问题感兴趣:JavaScript eval() "syntax error" on parsing a function string
答案 1 :(得分:1)
你的字符串应该是这样的:
var string = '{"func":"function (field) {var date = getDate(field);return date != -1;}","somethingElse": "Message","somethingElse2":"Message2"}';
var jsonObject = JSON.parse(string);
答案 2 :(得分:1)
首先,要均匀存储这样的方法,你需要使用替换功能
var text = JSON.stringify(a, function(k,v){
return typeof v == "function" ? v.toString() : v;
})
现在,要恢复功能,您需要使用reviver功能
JSON.parse(text,function(k,v){
console.log(v);
return typeof v == "string" && v.indexOf("function") == 0 ? new Function(v.substring(v.indexOf("{")+1, v.lastIndexOf("}"))) : v;
})
答案 3 :(得分:0)
如果你想重用这个功能,你可能需要像
那样
var data = {
"func": ["field", "var date = getDate(field); return date != -1;"],
"somethingElse": "Message",
"somethingElse2": "Message2"
},
jData = JSON.stringify(data),
pData = JSON.parse(jData),
func = new Function(pData.func[0],pData.func[1]);
document.write("<pre>" + func + "</pre>");
&#13;