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 回答