在没有GWT的情况下将Javascript对象转换为Java

时间:2012-05-25 16:16:11

标签: java javascript scripting

  

可能重复:
  Convert a JSON string to object in Java?

我正在为用Java编写的视频游戏开发脚本实现。

我有兴趣能够定义一个javascript对象,例如:

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

并将其通过确定的管道传递到Java土地。目前,在Java中,我收到的对象是sun.org.mozilla.javasript.internal.NativeObject,它看起来不太实用。有什么办法可以将javascript转移到Java对象中,我可以在其中访问数据吗?具体来说,不使用GWT,因为我没有真正使用Web技术。

编辑清晰度: 我没有将一串Javascript代码传递给Java函数ala JSON。我正在使用javax.script包来评估整个脚本。在脚本引擎中,存在与Java对象的绑定,其中包含我想在javascript对象中作为参数传递的方法。

提前感谢!

1 个答案:

答案 0 :(得分: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 !!" );
}