iqz*_*iqz 5 javascript java scriptengine nashorn
我有一个字符串形式的 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);
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
javax.script.ScriptException: TypeError: Cannot read property "value" from undefined in at line number 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4826 次 |
| 最近记录: |