通过使用 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 必须与您应该在 eval中指定的Bindings 相匹配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/