我有以下程序,它在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
对象中,以便我可以获得等效于Javascript中的result.value
和result.count
的值。
JSObject
接口由jdk.nashorn.api.scripting.ScriptObjectMirror
实现,该接口实际上是由invokeFunction
返回的。 - AlnitakMap<String, Object>
,这很好用,因为ScriptObjectMirror
实际上实现了该接口... 我应该改用JSObject
吗?我还没有找到明确的文档...Invocable
接口只定义了返回类型为Object
,这相当无用。 - Stijn de Witt