2

可能重复:
将 JSON 字符串转换为 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 包来评估整个脚本。在脚本引擎中,我想将我的 javascript 对象作为参数传递给 Java 对象。

提前致谢!

4

1 回答 1

2

我没有做太多的工作,但是 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 !!" );
}
于 2012-05-25T17:19:32.467 回答