通过在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字符串?
答案 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字符串。