2012-05-25 36 views
1

可能重複:
Convert a JSON string to object in Java?轉換一個Javascript對象的無渣GWT

我工作的一個腳本實施用Java編寫的視頻遊戲。

我感興趣的是能夠定義一個JavaScript對象,例如:

var obj = ({ 
    x: 1, 
    a: "meh", 
    onEvent: function(info) { 
     //do stuff 
    } 
}); 

並使其通過確定管道到Java的土地。目前,在Java中,我將該對象作爲sun.org.mozilla.javasript.internal.NativeObject接收,看起來不太可用。有沒有什麼辦法可以將JavaScript轉換爲可以訪問其中的數據的Java對象?特別是,沒有使用GWT,因爲我沒有真正使用網絡技術。

編輯清晰度: 我沒有將一串Javascript代碼傳遞給Java函數ala JSON。我使用javax.script包來評估整個腳本。在腳本引擎中,有一些我想用JavaScript對象作爲參數傳遞的方法綁定到Java對象。

在此先感謝!

+1

Mozilla的犀牛? – nullpotent

+0

你應該閱讀[Java中的JSON](http://www.json.org/java/)。 –

+1

據我所知,JSON不允許函數,閉包等... – JagWire

回答

1

我還沒有做過很多工作,但TFM的例子看起來並不那麼困難。不知道你已經嘗試過什麼,但無論如何:

public static void main(String[] args) throws Exception { 
    ScriptEngineManager manager = new ScriptEngineManager(); 
    ScriptEngine engine = manager.getEngineByName("JavaScript"); 

    // JavaScript code in a String. This code defines a script object 'obj' 
    // with one method called 'hello'.   
    String script = "var obj = new Object(); obj.hello = function(name) { print('Hello, ' + name); }"; 
    // evaluate script 
    engine.eval(script); 

    // javax.script.Invocable is an optional interface. 
    // Check whether your script engine implements or not! 
    // Note that the JavaScript engine implements Invocable interface. 
    Invocable inv = (Invocable) engine; 

    // get script object on which we want to call the method 
    Object obj = engine.get("obj"); // <---- THIS IS A JAVA.LANG.OBJECT 

    // invoke the method named "hello" on the script object "obj" 
    inv.invokeMethod(obj, "hello", "Script Method !!"); 
}