运行json字符串函数

ajs*_*sie 4 javascript json

我有一个像这样的json字符串:

json = "{'run': 'function() { console.log('running...'); }'}"
Run Code Online (Sandbox Code Playgroud)

如何在json字符串中运行该函数?

cla*_*rkf 7

您将不得不使用eval()(doc)函数.很多人对这个功能有很多感受.JSON最适合传输数据,而不是函数(请参阅JSON).功能应该放在页面上的脚本中.您发布的代码中也存在语法错误(函数包含在单引号(')中,console.log的第一个参数也是如此).但...

json = "{\"run\":\"function() { console.log('running...'); }\"}"; //Fixed, thanks
obj = JSON.parse(json);
eval(obj.run); //Logs "running..."
Run Code Online (Sandbox Code Playgroud)

更新:

哦,我错了.Eval似乎不喜欢匿名函数.与修改后的代码,它将解析JSON成与作为一个运行属性的对象String,以值"function() { console.log('running...'); }".但是当你eval(obj.run);,你会得到一个声明意外的SyntaxError(.据推测,这是(在函数()中.

所以,我可以想到两种方法来解决这个问题:

  1. 删除实际JSON字符串中的匿名函数(因此,让PHP忘记function () {),并评估它.这意味着它会尽快被调用eval.
  2. 我认为你想要的是能够将它评估为一个匿名函数,它将在你想要时调用.所以,你可以写一个包装函数(你也需要遵循选项1):

    function returnEval(str) {
        return function () { eval(str); }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这将允许您调用它.所以:

    obj = JSON.parse(json);
    obj.run = returnEval(obj.run);
    obj.run(); //Logs "running..."
    
    Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!