Ich habe folgendes Programm, das Javascript in Java (nashorn) ausführt. Der Javascript-Code gibt ein Objekt zurück.Wie entpacken Sie die Werte von Javascript (Nashorn) in Java-Objekt zurückgegeben?
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 ";
}
Wie kann ich auf die Objektwerte in meinem Ergebnisobjekt in Java zugreifen? Zunächst versuchte ich, result.toString()
zu verwenden, um Ergebnisse zu erhalten. Scheint return [Object Object]
Gibt es eine Möglichkeit, wo ich die Ergebnisse zu result
Objekt zurückkehren konnte, so dass ich zu result.value
äquivalente Werte bekommen konnte, und result.count
(ähnlich wie Javascript).
Vielen Dank! JSObject hat meinen Tag gerettet. Ich habe ScriptObjectMirror benutzt, was in meinem Fall kein Nein ist. – Rahul
@Rahul Die Schnittstelle von Yahoo 'JSObject' wird durch den' jdk.nashorn.api.scripting.ScriptObjectMirror' implementiert, der tatsächlich von 'invokeFunction' zurückgegeben wird. – Alnitak
Ich verwende derzeit eine Umwandlung zu 'Map', was gut funktioniert, da 'ScriptObjectMirror' diese Schnittstelle tatsächlich implementiert ... Soll ich stattdessen 'JSObject' verwenden? Ich habe dazu noch keine klare Dokumentation gefunden ... Die 'Invocable'-Schnittstelle definiert nur' Object' als Rückgabetyp, was ziemlich nutzlos ist. –