在 Java GraalVM 中访问复杂的 Javascript 对象

Access complex Javascript object in Java GraalVM

我有一个用例,其中我有一个 java 地图,我将其转换为 ProxyMap,使用 context.eval 在 java 脚本中使用该地图,然后在 js 中创建一个新对象(嵌套 json)。现在我想在 java 中使用在 java 脚本中创建的对象,最好是 Map。

现在我的 js 创建的对象是动态的,我不知道所有字段都可能存在。

所以基本上我正在做的是:

  1. context.getBindings("js").putMember("input", ProxyObject.fromMap(map));
  2. Value js = context.eval("js", "var obj = {'a':input['type']};");
  3. 现在我需要将此 obj 作为 Java 中的地图获取。

据我所知,我可以使用 getMember 访问 java 中 obj 的字段,但是 obj 可以是动态的并且可以相当也很复杂,我希望能有别的出路?

您可以使用 Value.as(Map.class) method 转换为 Map

类似于:

 assert context.eval("js", "({foo:'bar'})").as(Map.class).get("foo").equals("bar");