在 Java GraalVM 中访问复杂的 Javascript 对象
Access complex Javascript object in Java GraalVM
我有一个用例,其中我有一个 java 地图,我将其转换为 ProxyMap,使用 context.eval 在 java 脚本中使用该地图,然后在 js 中创建一个新对象(嵌套 json)。现在我想在 java 中使用在 java 脚本中创建的对象,最好是 Map。
现在我的 js 创建的对象是动态的,我不知道所有字段都可能存在。
所以基本上我正在做的是:
context.getBindings("js").putMember("input", ProxyObject.fromMap(map));
Value js = context.eval("js", "var obj = {'a':input['type']};");
- 现在我需要将此
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");
我有一个用例,其中我有一个 java 地图,我将其转换为 ProxyMap,使用 context.eval 在 java 脚本中使用该地图,然后在 js 中创建一个新对象(嵌套 json)。现在我想在 java 中使用在 java 脚本中创建的对象,最好是 Map。
现在我的 js 创建的对象是动态的,我不知道所有字段都可能存在。
所以基本上我正在做的是:
context.getBindings("js").putMember("input", ProxyObject.fromMap(map));
Value js = context.eval("js", "var obj = {'a':input['type']};");
- 现在我需要将此
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");