Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 运行json字符串函数_Javascript_Json - Fatal编程技术网

Javascript 运行json字符串函数

Javascript 运行json字符串函数,javascript,json,Javascript,Json,我有一个json字符串,如下所示: json = "{'run': 'function() { console.log('running...'); }'}" jQuery.each( JS, function( method, value ) { new Function ( "a, b", "if ( a == 'function' ) { new Function ( '', b )(); }" )( method, value ); } ); 如何在json字符串中运

我有一个json字符串,如下所示:

json = "{'run': 'function() { console.log('running...'); }'}"
jQuery.each( JS, function( method, value ) {
        new Function ( "a, b", "if ( a == 'function' ) { new Function ( '', b )(); }" )( method, value );
} );

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

json并不是真正用于此目的,但似乎是一个很好的示例。

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


更新:

哦,我错了。Eval似乎不喜欢匿名函数。使用修订后的代码,它将json解析为一个对象,该对象的run属性是
字符串
,值为
“function(){console.log('running…');}”
。但是当你
eval(obj.run)时,您将得到一个声明意外(.s)的SyntaxError,这可能是(在函数)中)

因此,我可以想出两种方法来处理这个问题:

  • 删除实际JSON字符串中的匿名函数(因此,让您的PHP忘记
    函数(){
    ),并对其进行求值。这意味着只要您
    求值它,就会调用它
  • 我认为您想要的是能够将其计算为一个匿名函数,该函数将在您需要时被调用。因此,您可以编写一个包装函数(您也需要遵循选项1):

    这将允许您调用它。因此:

    obj = JSON.parse(json);
    obj.run = returnEval(obj.run);
    obj.run(); //Logs "running..."
    

  • 希望这有帮助!

    这在Firefox中对我很有用:

    var json = "{'run': 'function() { console.log(\\'running...\\'); }'}";
    eval('var j = ' + json);
    eval('var r = ' + j.run);
    r();
    
    试试这个,它可以工作:

    var JS = { "function" : "alert( new Date().getTime() );" };
    
    new Function ( "", JS["function"] )();
    
    对于嵌套函数,您也可以使用如下内容:

    json = "{'run': 'function() { console.log('running...'); }'}"
    
    jQuery.each( JS, function( method, value ) {
            new Function ( "a, b", "if ( a == 'function' ) { new Function ( '', b )(); }" )( method, value );
    } );
    

    我知道这个线程很旧,但我想和大家分享一下。你们可以把字符串变成json,并用这些函数轻松解析它

    function makeString(val){
        return JSON.stringify(val, function (key, value) {if (typeof value == 'function') {return value.toString();}return value;});
    }
    
    function parseIt(val){
        return JSON.parse(string, function (key, value) {if (value.toString().search("function")>-1) {eval("var func = " + value);return func;}return value;});
    }
    
    在不使用
    eval('function()')
    的情况下,您可以使用
    newfunction(strName)
    创建一个新函数。下面的代码使用FF、Chrome、IE进行了测试

    <html>
    <body>
    <button onclick="test()">Try it</button>
    </body>
    </html>
    <script type="text/javascript">
      function test() {
    
        try {    
    
            var myJSONObject = {"success" : true, "jsFunc" : "myFunction()"};
            var fnName = myJSONObject.jsFunc;
            var fn = new Function(fnName);
            fn();
    
          } catch (err) {
            console.log("error:"+err.message);
          }
    
      }
    
      function myFunction() {
        console.log('Executing myFunction()');
      }
    </script>
    
    
    试试看
    功能测试(){
    试试{
    var myJSONObject={“success”:true,“jsFunc”:“myFunction()”};
    var fnName=myJSONObject.jsFunc;
    var fn=新函数(fnName);
    fn();
    }捕捉(错误){
    日志(“错误:+err.message”);
    }
    }
    函数myFunction(){
    log('Executing myFunction()');
    }
    
    eval(json.substring(10,json.length-2))();
    ?=)CouchDB正在使用它在数据库中存储map reduce函数。我也必须在数据库中存储函数。第二行在Chrome中给出了我:SyntaxError:意外令牌ILLEGAL@weng-上面修好了。希望我能帮忙!