4

Javaでjsonオブジェクトを構築しています。関数を JavaScript に渡し、jquery $.isFunction() で検証する必要があります。私が遭遇している問題は、json オブジェクトの関数を文字列として設定する必要があることですが、json オブジェクトがオブジェクトと共に周囲の引用符を渡しているため、無効な関数になります。スクリプトに引用符を表示せずにこれを行うにはどうすればよいですか。

Java の例

JSONObject json = new JSONObject();
json.put("onAdd", "function () {alert(\"Deleted\");}");

Jquery スクリプト

//onAdd output is "function () {alert(\"Deleted\");}" 
//needs to be //Output is function () {alert(\"Deleted\");} 
//in order for it to be a valid function.
if($.isFunction(onAdd)) { 
    callback.call(hidden_input,item);
}

何かご意見は?

4

3 に答える 3

9

JSONString インターフェースを実装できます。

import org.json.JSONString;

public class JSONFunction implements JSONString {

    private String string;

    public JSONFunction(String string) {
        this.string = string;
    }

    @Override
    public String toJSONString() {
        return string;
    }

}

次に、あなたの例を使用して:

JSONObject json = new JSONObject();
json.put("onAdd", new JSONFunction("function () {alert(\"Deleted\");}"));

出力は次のようになります。

{"onAdd":function () {alert("Deleted");}}

前述のように、これは無効な JSON ですが、必要に応じて機能する可能性があります。

于 2014-04-14T23:00:52.833 に答える
3

できません。JSON 形式には、関数のデータ型は含まれません。JSON 経由で関数を渡したい場合は、関数を文字列にシリアル化する必要があります。

于 2012-06-01T16:30:16.013 に答える
1

ランニング

onAdd = eval(onAdd);

文字列を関数に変換する必要がありますが、一部のブラウザではバグがあります。

IEの回避策は次のとおりです。

onAdd = eval("[" + onAdd + "]")[0];

eval()とnew Function()は同じものですか?を参照してください。

于 2012-06-01T16:33:16.580 に答える