在Java中检索JavaScript返回的对象

时间:2014-02-28 10:36:41

标签: 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字符串?

1 个答案:

答案 0 :(得分:1)

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

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

只要您使用正确的getter和setter来定义/重新序列化对象,您可以使用它们来强制/反序列化对象,这些getter和setter必须与您在 eval指定的 Bindings 相匹配打电话。

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

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;
    }
}

并使用它来映射地图中的对象属性。

我们的想法是迭代对象属性,然后生成一个特定类的对象,可以由GSON使用或自己生成JSON字符串。