2012-06-01 51 views
4

我在java中構建一個json對象。我需要將一個函數傳遞給我的JavaScript,並使用jquery $ .isFunction()進行驗證。我遇到的問題是我必須將json對象中的函數設置爲字符串,但json對象將周圍的引號與對象一起傳遞,從而導致無效函數。如何在腳本中不顯示引號的情況下執行此操作。Java將函數添加到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); 
} 

有什麼想法?

回答

1

運行

onAdd = eval(onAdd); 

應該把你的字符串轉換成一個功能,但它在某些瀏覽器馬車。

在IE的解決方法是使用

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

Are eval() and new Function() the same thing?

+0

嗯所以沒什麼穩定的,那麼刪除開始和結束引號呢? –

+0

@George,如果你刪除了引號,它不是JSON。但是,如果您使用JSON對象在Java中呈現HTML,那麼您可以'out.println(json.get(「onAdd」))'並且它將打印出不帶引號 –

3

你不行。 JSON格式不包含函數數據類型。如果你想通過JSON傳遞它們,你必須將函數串行化成字符串。

+0

你能提供一個例子嗎? –

+0

你有什麼是一個例子。 – Quentin

+0

如何將它轉換回腳本中的函數? –

7

您可以實現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,但也許適用於您的需要。