javascript - 在 Java 中检索 JavaScript 返回的对象

标签 javascript java-7

通过使用 Java 7 中的 JavaScript API,我能够编译和调用 JavaScript 函数。问题在于 JavaScript 函数返回的值。简单类型可以很容易地进行类型转换。但是,如果一个 JavaScript 函数返回一个对象。如何将返回的对象转成json字符串?

    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine se = mgr.getEngineByName("JavaScript");
    if (se instanceof Compilable) {
        Compilable compiler = (Compilable) se;
        CompiledScript script = compiler
                .compile("function test() { return { x:100, y:200, z:150 } }; test();");
        Object o = script.eval();
        System.out.println(o);
    } else {
        System.out.println("Engine cann't compile code.");
    }

如何将JavaScript返回的对象转换为JSON字符串?

最佳答案

也许适用于 Java 的 Google JSON 库 (GSON) 对您有用:

https://code.google.com/p/google-gson/

您可以使用它们对对象进行序列化/反序列化,只要您使用正确的 getter 和 setter 定义它们的类,这些 getter 和 setter 必须与您应该在 evalBindings 相匹配strong> 调用。

如果您需要在序列化之前检查返回的对象属性,请定义一个与此类似的类。

public class Serializer {
    static public Map<String, Object> object2Map(NativeObject o)
    {
        Map<String, Object> ret = new HashMap<>();
        for(Object keyField: o.getAllIds())
        {
            try {
                Object valObject = o.get(keyField.toString());
                ret.put(keyField.toString(), valObject);
            } catch (Exception e) {
                continue; 
            }
        }
        return ret;
    }
}

并用它来映射 map 中的对象属性。

思路是遍历对象的属性,然后生成特定类的对象,供GSON使用或者自己生成JSON字符串。

关于javascript - 在 Java 中检索 JavaScript 返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22092662/

相关文章:

javascript - 视差 H1 和 H2

java - 在 Java 1.7 上编译 Java 1.5 仍然有效吗?

Java 7 精确重抛和遗留代码

Java 删除 -> 编译时类型对齐 - 或 Java 库/框架代码转换为应用程序逻辑

java - Java 中的闭包将如何替换/增强接口(interface)?

javascript - 询问 .html() 是否有具有特定 id 的 img 元素

javascript - 在 React 中从 JSON 推送时,数组仅存储最后一个变量

javascript - 2d html5 Canvas 碰撞,howto

javascript - 揭示模块模式 - 使用 Jasmine 进行单元测试

android-studio - 支持 Java 1.7 的 Android Studio 预览版对我来说已损坏