javascript - 使用 rhino 检索 java 中的 javascript 对象

标签 javascript java json rhino

我想从一个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);

但是要将该对象作为 JSON 获取(类似于 cars.stringify() ),该 javascript 函数会是什么样子呢?更进一步的是,使用这个功能的正确方法是什么? 最后,如何以及在何处将对象保存在 java 对象中?

我已经检查过this postthis post还有this post但所有这些都不符合我的标准,或者缺少用于澄清的代码示例

编辑: 我找到了另一种在 java 中以字符串形式调用/编写 javascript 函数的方法,例如:

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”包含我的 cars.js?必须有某种可能性将该对象加载到此变量中

可能是这样的:

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

但是我如何/以及在哪里指定使用此函数的文件?

最佳答案

我找到了一种使用 Rhino 的 ScriptEngine 检索对象的方法

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;
}

因此该对象被检索并可以被访问和转换为 Map> 并递归访问,最终获得 JavaScript 对象的 java 对象。 无需使用函数

关于javascript - 使用 rhino 检索 java 中的 javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59968119/

相关文章:

java - 我如何修改 mongodb 查询以适应集合结构

json - Haskell:将 JSON 数据解析为 Map 或元组列表?

ios - json数组字符串转换为nsmutablearray

javascript - 从回调返回一个值或在node.js 中的特定回调之外访问它?

javascript - 检测用户是否离开页面并使用ajax删除

java - Gradle 相当于 Surefire classpathDependencyExclude

json - "Bytes to be written to the stream exceed the Content-Length bytes size specified"与 UTF8 编码的 json

javascript - 为什么浏览器仍然从服务器拉取资源?

javascript - 鼠标悬停 UL 子节点不正确

java - Hystrix:提高命令的 maxSemaphoreCount?