【问题标题】:Converting a Javascript object to Java without GWT [duplicate]在没有 GWT 的情况下将 Javascript 对象转换为 Java [重复]
【发布时间】:2012-06-01 05:52:43
【问题描述】:

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

提前致谢!

【问题讨论】:

  • 你应该阅读JSON in Java
  • 据我所知,JSON 不允许函数、闭包等...
  • @JagWire 你是对的!抱歉,我没有看到那个功能。
  • 这是“如何在 java 中解析 JSON”的副本? OP 明确表示他正在尝试从 java 执行 javascript,他希望在传入的对象上执行实例方法证明了这一点。地狱,他甚至澄清说他正在使用 java 来解析 javascript。
  • 我同意 Pedantic,这绝对不是 Java 中使用 JSON 的问题。

标签: java javascript scripting


【解决方案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 !!" );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多