为什么将一个简单的JSON对象声明为执行到Rhino的JavaScript脚本无法正常工作?

时间:2017-11-08 17:29:54

标签: javascript json rhino

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

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

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

我做过类似的事情(进入我的WSO2 ESB代码):

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

将相同的代码用于执行broswer的经典JavaScript文件,它可以正常工作,但似乎它无法使用Rhino工作。我获得了与非法角色有关的错误(我也尝试将``替换为&#34; &#34 ; 以及&#39; &#39; ,但我仍然会收到错误。)

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": []
}

以不同的方式?我的意思是以编程方式而不明确声明它。

1 个答案:

答案 0 :(得分:1)

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

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

为什么,因为JavaScript首先将后面的滴答作为模板解决,并在解析JSON 字符串之前用变量的内容填充它们:

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