如何使用string中的函数创建对象:

时间:2016-04-26 08:39:26

标签: javascript json parsing serialization

我将此代码存储为字符串:

{
  "func": function (field) {
    var date = getDate(field);
    return date != -1;
  },
  "somethingElse": "Message",
  "somethingElse2": "Message2"
}

有没有办法将它转换为对象? JSON.parse不允许使用函数。

4 个答案:

答案 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);

https://jsfiddle.net/pc6hdk1y/

答案 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;
&#13;
&#13;