Доступ к сложному объекту Javascript в Java GraalVM

#javascript #java #graalvm #graaljs

Вопрос:

У меня есть пример использования, когда у меня есть карта java, которую я конвертирую в ProxyMap, использую эту карту в javascript с помощью context.eval, а затем создаю новый объект в js (вложенный json). Теперь я хочу использовать объект, созданный в javascript еще в java, предпочтительно карту.

Теперь мой созданный js объект динамичен, и я не знаю, какие все поля могут присутствовать.

Так что в основном то, что я делаю, это:

  1. context.getBindings("js").putMember("input", ProxyObject.fromMap(map));
  2. Value js = context.eval("js", "var obj = {'a':input['type']};");
  3. Теперь мне нужно получить это obj в виде карты на Java.

Из того, что я выяснил, я могу получить доступ к полям obj в java, используя getMember , но, поскольку obj они могут быть динамичными и могут быть довольно сложными, я надеялся, что может быть другой выход?

Ответ №1:

Вы можете преобразовать в a Map , используя этот Value.as(Map.class) метод.

Что-то вроде:

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