javascript - 如何使用 Nashorn 将 Javascript 对象从 Java 传递到 Javascript

标签 javascript java nashorn scriptengine

我有一个字符串形式的 JavaScript 对象(实际上来自数据库),我需要使用 Nashorn (Java 8) 将其传递给 Javascript 函数。引擎将传递的参数视为 javascript 中的字符串。我希望它将其识别为 Javascript 对象。

下面是代码片段:

String script = "function genData(dataModel) { return 'hello world '+ dataModel.url.value + ' done'; }";  

//"{url : {value : "abc.com",type  : "string"},layout : {value : "",type  : "string"}}";  

String dataModel = "{url : {value : \"abc.com\",type  : \"string\"},layout : {value : \"\",type  : \"string\"}}";

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
Invocable inv = (Invocable) engine;
result = inv.invokeFunction("genData", dataModel);

我得到的错误是:
javax.script.ScriptException: TypeError: 无法从第 1 行的未定义中读取属性“值”

最佳答案

您可以先将 dataModel 字符串转换为 JSON - 在函数本身或其他地方然后传递它。

例子:

String dataModel = ...;
// convert the string as a JSON object
engine.put("dataModel", dataModel);
JSObject obj = (JSObject)engine.eval("JSON.parse(dataModel)");
...
// dataModel is a script object - as it is a result of JSON.parse
// pass it as parameter for genData
inv.invokeFunction("genData", obj);

关于javascript - 如何使用 Nashorn 将 Javascript 对象从 Java 传递到 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43930809/

相关文章:

java - 检查对象数组以查看每个对象是否共享一个值,然后执行某些操作 (Java)

java - 如何将姓名以及电子邮件和密码添加到 firebase 数据库 android

javascript - 无法从 nashorn java 调用 javascript 的异步函数

javascript - Nashorn/jjs 安全 : executing a user's script on server side

javascript - 使用 connect.query() 在 nodejs 中查询 url

javascript - 当我点击下载按钮时开始 10 秒倒计时

javascript - event.srcElement 在 Internet Explorer 8 中为 null

javascript - 如何检查文本框中 JavaScript 中的链接

java - 如何将 arraylist 中的字符串与数组的 char 类型进行比较

javascript - 如何使用 Nashorn 的 JSObject 进行字符串连接