Получить javascript объект в java с носорогом - PullRequest
1 голос
/ 29 января 2020

Я хочу получить объект javascript из файла javascript, который состоит только из этого одного большого объекта. Например:

var cars = {
   mercedes: {
      colour: 'silver',
      drivemode: 'alldrive' 
   },

   audi: {
      size: '4x2x1,5m'
      speed: '220 kmph'
   }
};

Для javapart я использую Rhino, чтобы получить этот объект. На данный момент я кодировал:

Context context = context.enter();
context.setOptimizationLevel(9);
context.setLangaugeVersion(170);
context.getWrapFactory().setJavaPrimitiveWrap(false);

Scriptable defaultScope = context.initSafeStandardObjects();

Так что теперь у меня должна быть возможность получить объект javascript. Но как?

Script function = context.compileString("Any javascriptfunction as String", "javaScriptFile.js", 1, null);
function.exec(context, defaultScope);

Но как бы выглядела эта функция javascript, чтобы получить этот объект как JSON (что-то вроде cars.stringify ())? И еще больше, это правильный подход в использовании этой функции? И, наконец, как и где мне сохранить объект в java объекте?

Я уже проверил этот пост и этот пост также этот пост но все они не соответствуют моим критериям или отсутствуют в примере кода для пояснения

Редактировать: я нашел другой подход при вызове / написании функции javascript в java в виде строки, подобной:

Scriptable scriptObject;
private String functionAsString = "function getAsJson() {var objectString = { colour: \"silver\", drivemode: \"alldrive\" };return JSON.stringify(objectString);}";
Function fct = context.compileFunction(defaultScope, functionAsString, "AnyName", 1, null);
Object result = fct.call(context, defaultScope, scriptObject, null);

Единственная проблема, которая до сих пор остается, - как заставить "objectString" содержать мои машины. js? Каким-то образом должна быть возможность загрузить этот объект в эту переменную

, вероятно, что-то вроде:

String functionAsString2 = "get cars() {return this.cars;}";

Но как / и где мне указать файл, в котором будет использоваться эта функция?

1 Ответ

1 голос
/ 03 февраля 2020

Я нашел способ извлечь объект с помощью ScriptEngine из Rhino

private ScriptEngineManager manager = new ScriptEngineManager();
private ScriptEngine engine = manager.getEngineByName("JavaScript");

engine.eval(Files.newBufferReader("PATH TO THE JAVASCRIPT FILE", StandardCharsets.UTF_8));

Object result = engine.get("cars"); //Variable in the javascript File

if(result instanceof Map){
result = (Map<String,Object>) result;
}

, чтобы получить объект и получить к нему доступ и привести его как карту>, а затем получить рекурсивный доступ к нему, получив java Объект JavaScript Объекта. Нет необходимости использовать функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...