javascript - 为什么在 Rhino 中执行的 JavaScript 脚本中声明一个简单的 JSON 对象不起作用?

标签 javascript json rhino

我不是很喜欢 JavaScript。我正在使用 JavaScript 开发一个处理 JSON 文档的小脚本。此 JavaScript 脚本不会在浏览器中执行,而是在另一个允许使用 JavaScript 编写某些任务脚本的产品中执行(该产品是 WSO2 ESB,但目前并不重要)。

本产品(WSO2 ESB)使用Rhino作为JavaScript引擎,用于将JavaScript脚本实现到Java应用中。

我在尝试在这种环境中创建一个简单的 JSON 对象时遇到了一些问题。

我做过这样的事情(在我的 WSO2 ESB 代码中):

<script language="js">
<![CDATA[
    var response = JSON.parse(`
        {
            "forecast": []
        }
    `);   
]]>
</script>

在浏览器中执行的经典 JavaScript 文件中使用相同的代码可以正常工作,但似乎无法使用 Rhino。我收到与非法字符相关的错误(我还尝试将 `` 替换为 "" 并且使用 '' 但我仍然遇到错误)。

Java Stacktrace 中的类似内容:

Caused by: javax.script.ScriptException: org.mozilla.javascript.EvaluatorException: illegal character (<Unknown Source>#9)
        at com.sun.phobos.script.javascript.RhinoScriptEngine.compile(RhinoScriptEngine.java:341)
        at com.sun.phobos.script.javascript.RhinoScriptEngine.compile(RhinoScriptEngine.java:323)
        at org.apache.synapse.mediators.bsf.ScriptMediator.initInlineScript(ScriptMediator.java:399)
        ... 32 more

Rhino 可能有什么问题?我认为问题可能与可能必须以某种方式转义的 `` 字符有关。有什么想法吗?

或者另一个更纯粹的 JavaScript 解决方案可能是:是否可以像这样声明一个 JSON 对象:

{
    "forecast": []
}

换种方式?我的意思是在没有明确声明的情况下以编程方式进行。

最佳答案

这适用于支持带有模板文字的 ES6 的现代浏览器:

var response = JSON.parse(`{"forecast": []}`);   

为什么,因为JavaScript首先将反引号作为模板解决,并在解析JSON string之前用变量的内容填充它们:

    
    var test = "Cloudy";
    var string = `{\"forecast": ["${test}"]}`;
    var response = JSON.parse(string);
    
    console.log(response);

但也许您的 Rhino 版本不支持 ES6,所以这行不通。多行也引起了问题:

var response = JSON.parse(''+
    '{'+
    '    "forecast": []'+
    '}'
); 

console.log(response);

关于javascript - 为什么在 Rhino 中执行的 JavaScript 脚本中声明一个简单的 JSON 对象不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47186066/

相关文章:

javascript - 如何在javascript中初始化一个 boolean 数组

实现删除链表中的节点时,Javascript改变对象的内存

javascript - 如何将 JSON 对象传递给 angularjs 中的资源

javascript - 在 Javascript/Reactjs 中使用 Fetch API 和 map() 显示 JSON 数据

java - 将 Java 整数绑定(bind)到 JavaScriptEngine 不起作用

java - 用javascript语言编译JasperReport时出现异常

javascript - GridBooleanColumn 数据首先为 0 和 1,但没有 true 和 false

javascript - 如何仅使用 HTML、CSS 和 JavaScript 将索引添加到本地存储?

json - 使用 PowerShell 将 CSV 转换为 JSON 并将 JSON 转换为 CSV

angularjs - 如何配置 rhino 为 angularjs Controller 运行 jasmine 测试