web-dev-qa-db-ja.com

JSONで関数を渡し、実行する

関数をjson文字列として渡し(JSON.stringifyによる変換)、別の関数に送信し、jsonを解析してからjsonにあった関数を実行する方法はありますか?私はjqueryとjavascriptを使用しています。

32
amateur

動作する

基本的に、この種のことに注意する必要があります。既存のjavascript関数を取得し、それを文字列に変換して評価すると、関数の再宣言の問題が発生する可能性があります。サーバーからファンクション文字列を取得するだけで実行する場合は、jsfiddleで行ったように実行できます。

Javascript

var myFunc = "function test() {alert('test');}";

$(document).ready(function() {
    var data = new Object();
    data.func = myFunc;
    var jsonVal = $.toJSON(data);
    var newObj = $.evalJSON(jsonVal);
    eval(newObj.func);
    test();
});​
22
treeface

はい、できます。それを行う方法はたくさんあります。

ここで指摘されているように、「悪」のeval関数を使用する必要はありません(なぜそれを避ける必要があるのか​​、yahoogleをご覧ください) http://javascript.about.com/library/bleval.htm

var tmpFunc = new Function(codeToRun);
tmpFunc(); 

いずれの段階でもJSONであったかどうかは関係ありません。

50

はい、toString()メソッドを使用して関数を文字列に変換できます。

ここに例があります 関数を文字列に変換し、関数に戻すことを示します:

var myfunc = function () {
    alert('It works!');
}

var as_string = myfunc.toString();

as_string = as_string.replace('It works', 'It really works');

var as_func = eval('(' + as_string + ')');

as_func();
19
Skilldrick

JSONfnプラグインを見てください。

http://www.eslinstructor.net/jsonfn/

それはまさにあなたが求めていることをします。

-バディム

4
vadimk

オブジェクトとそのプロトタイプを文字列化して解析できるJSONfnのフォークを作成しました。私の基本的なテストではうまくいきました。

https://github.com/cgarciae/jsonfn

3
Cristian Garcia

JSONファイルの関数を操作するときにJavaScriptのcall()関数を使用すると役立つことがわかりました。

var returnData = theJsonData.theFunction.call();
console.log(returnData); // prints any return data

私はそれが立ち寄る人を助けることを願っています!

0
Bennybear