java - 如何取消装箱 javascript (nashorn) 在 Java 对象中返回的值?

标签 java javascript nashorn

我有以下程序,它在 Java (nashorn) 中执行 Javascript。 Javascript 代码正在返回一个对象。

public Object execute(){
        ScriptEngineManager sem = new ScriptEngineManager();
        ScriptEngine e = sem.getEngineByName("nashorn");  
        Invocable invocable = (Invocable)e;
        ScriptEngineFactory f = e.getFactory();
        Object result;
        try {
            String statement = "function fetch(value, count) { count++ ; return {'value': value,'count' : count} }; } ; ";
            CompiledScript cs = ((Compilable)e).compile(statement);
            cs.eval();
            result = invocable.invokeFunction("fetch", 10,2);

        }   
        catch (Exception se ) {
            String version = System.getProperty("java.version");
            System.out.println(version);
            result = "script exception ";
        }

如何在 Java 中访问结果对象中的对象值? 最初,我尝试使用 result.toString() 来获取结果。似乎 返回 [Object Object]

有没有一种方法,我可以将结果返回到 result 对象,这样我可以获得等同于 result.valueresult.count 的值(类似于 Javascript)。

最佳答案

如果你的程序的返回值是一个 JavaScript 对象,你应该能够在 Java 中将它转换为 jdk.nashorn.api.scripting.JSObject 然后使用它的方法(例如 getMember()) 来查询和操作它。

关于java - 如何取消装箱 javascript (nashorn) 在 Java 对象中返回的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23089938/

相关文章:

Java正则表达式包含下划线

java - 无法从 JButton 获取任何输入,我做错了什么?

javascript - 如何通过Javascript Post函数保护通过PHP运行的SQL

由于数组语法,Javascript 警报可能无法正常工作

javascript - JS - 打开子导航,同时关闭以前打开的子导航

javascript - 当使用绑定(bind)进行 eval 时,Nashorn 找不到函数

java - 字符串、byte[] 和压缩

java - Optaplanner 日志记录无法从 RestEasy 服务器正常运行

java - 在 Servlet 中重用 Nashorn ScriptEngine

java - Nashorn 加载 javascript 时出错 - 版本问题?