【发布时间】:2021-07-05 17:45:27
【问题描述】:
我正在我的 Java11 项目中使用 org.graalvm.polyglot 脚本引擎来评估 JavaScript。
要评估的脚本返回一个包含两个条目的 JavaScript 数组。
...
var result={};
result.isValid=false;
result.errorMessage = new Array();
result.errorMessage[0]='Somehing go wrong!';
result.errorMessage[1]='Somehingelse go wrong!';
....
在我的 java 代码中,我尝试评估结果对象:
Value resultValue = context.getBindings(languageId).getMember("result");
在我的 Eclipse 调试器中,我可以看到我收到了一个包含预期值的 PolyglotMap:
我可以使用这样的代码遍历该地图以获取值:
...
try {
mapResult = resultValue.as(Map.class);
} catch (ClassCastException | IllegalStateException | PolyglotException e) {
logger.warning("Unable to convert result object");
return null;
}
Iterator it = mapResult.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next();
String itemName = pair.getKey().toString();
Object itemObject = pair.getValue();
...
通过这种方式,我能够提取布尔值“isValid”。但是对于对象“errorMessage”,我很挣扎。
在 Eclipse 调试器中再次检查对象,它看起来像这样:
如果我测试这个对象,它是一个 instanceOf Map。但我无法从该对象中获取任何值。
谁能帮我理解这个对象到底代表什么以及如何提取'Someting go wrong!'和'Sometingelse go wrong!'这两个值?
当我遍历第二张地图时,它似乎是空的——即使调试器显示了正确的值。
【问题讨论】:
标签: javascript java graalvm