为什么在 Rhino 中执行的 JavaScript 脚本中声明一个简单的 JSON 对象不起作用?
Why declaring a simple JSON object into a JavaScript script executed into Rhino is not working?
我不太喜欢 Java脚本。我正在使用 JavaScript 开发一个在 JSON 文档上工作的小脚本。此 JavaScript 脚本不会在浏览器中执行,但会在另一个允许使用 JavaScript 编写某些任务脚本的产品中执行(该产品是 WSO2 ESB,但目前并不重要)。
本产品(WSO2 ESB)使用Rhino作为Java脚本引擎,用于将JavaScript脚本实现到Java应用程序中。
我在尝试在这种环境中创建一个简单的 JSON 对象时遇到了一些问题。
我做过这样的事情(在我的 WSO2 ESB 代码中):
<script language="js">
<![CDATA[
var response = JSON.parse(`
{
"forecast": []
}
`);
]]>
</script>
将相同的代码用于在浏览器中执行的经典 Java脚本文件中,它工作正常,但似乎无法使用 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 可能有什么问题?我认为问题可能与可能必须以某种方式转义的 `` 字符有关。有什么想法吗?
或者另一个更纯粹的 Java脚本变通解决方案可能是:是否可以像这样声明一个 JSON 对象:
{
"forecast": []
}
以不同的方式?我的意思是在没有明确声明的情况下以编程方式。
这适用于支持带有模板文字的 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);
我不太喜欢 Java脚本。我正在使用 JavaScript 开发一个在 JSON 文档上工作的小脚本。此 JavaScript 脚本不会在浏览器中执行,但会在另一个允许使用 JavaScript 编写某些任务脚本的产品中执行(该产品是 WSO2 ESB,但目前并不重要)。
本产品(WSO2 ESB)使用Rhino作为Java脚本引擎,用于将JavaScript脚本实现到Java应用程序中。
我在尝试在这种环境中创建一个简单的 JSON 对象时遇到了一些问题。
我做过这样的事情(在我的 WSO2 ESB 代码中):
<script language="js">
<![CDATA[
var response = JSON.parse(`
{
"forecast": []
}
`);
]]>
</script>
将相同的代码用于在浏览器中执行的经典 Java脚本文件中,它工作正常,但似乎无法使用 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 可能有什么问题?我认为问题可能与可能必须以某种方式转义的 `` 字符有关。有什么想法吗?
或者另一个更纯粹的 Java脚本变通解决方案可能是:是否可以像这样声明一个 JSON 对象:
{
"forecast": []
}
以不同的方式?我的意思是在没有明确声明的情况下以编程方式。
这适用于支持带有模板文字的 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);