Javascript 运行json字符串函数
我有一个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 = "{'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-上面修好了。希望我能帮忙!