在Java中使用JSONata引发异常

在Java中使用JSONata引发异常,java,json,exception,jsonata,Java,Json,Exception,Jsonata,我正在尝试在java中使用JSONata 步骤: 在类路径中包含Jsonata.js 调用: ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("JavaScript"); Invocable inv = (Invocable) engine; FileReader jsonata = new FileReader("jsonata.js")

我正在尝试在java中使用JSONata

步骤: 在类路径中包含Jsonata.js

调用:

ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
Invocable inv = (Invocable) engine;
FileReader jsonata = new FileReader("jsonata.js");
// load the JSONata processor
engine.eval(jsonata);
参考链接:

当我尝试使用此选项时,会出现以下异常:

原因:jdk.nashorn.internal.runtime.ParserException: :1445:12预期但找到的函数evaluateexpr,输入, 环境{

在 jdk.nashorn.internal.parser.AbstractParser.errorAbstractParser.java:294 在 nashorn.internal.parser.AbstractParser.errorAbstractParser.java:279 在 java:350 在 jdk.nashorn.internal.parser.AbstractParser.expectAbstractParser.java:337 在 jdk.nashorn.internal.parser.parser.functionExpressionParser.java:2654 位于jdk.nashorn.internal.parser.parser.statementParser.java:875 at jdk.nashorn.internal.parser.parser.sourceElementsParser.java:773 at jdk.nashorn.internal.parser.parser.functionBodyParser.java:2901 at jdk.nashorn.internal.parser.parser.functionExpressionParser.java:2663 在 jdk.nashorn.internal.parser.parser.memberExpressionParser.java:2506 在 nashorn.internal.parser.parser.leftHandSideExpressionParser.java:2372 在 jdk.nashorn.internal.parser.parser.unaryExpressionParser.java:3147 位于jdk.nashorn.internal.parser.parser.expressionParser.java:3282 at nashorn.internal.parser.parser.primaryExpressionParser.java:1992 在 jdk.nashorn.internal.parser.parser.memberExpressionParser.java:2511 在 nashorn.internal.parser.parser.leftHandSideExpressionParser.java:2372 在 jdk.nashorn.internal.parser.parser.unaryExpressionParser.java:3147 在 jdk.nashorn.internal.parser.parser.assignmentExpressionParser.java:3353 在 jdk.nashorn.internal.parser.parser.variableStatementParser.java:1088 位于jdk.nashorn.internal.parser.parser.statementParser.java:884 at jdk.nashorn.internal.parser.parser.sourceElementsParser.java:773 at jdk.nashorn.internal.parser.parser.programParser.java:709 at java:283 at java:249 at jdk.nashorn.internal.runtime.Context.compileContext.java:1284 at jdk.nashorn.internal.runtime.Context.compileScriptContext.java:1251 在 jdk.nashorn.internal.runtime.Context.compileScriptContext.java:627 在 jdk.nashorn.api.scripting.NashornScriptEngine.compileImplNashornScriptEngine.java:535 …6摩尔


关于如何使用它的任何帮助都将非常有用。

您需要提供带有三个参数的函数Evaluate,您只给出了表达式。根据链接,您还应该提供ff

代码:

engine.put("input", new String(sample));
and 
engine.put("resultjson", resultjson);

希望对您有所帮助

因为1.2版,jsonata.js使用ES6功能,所以您需要确保您使用的Nashorn版本支持这一点。或者,您可以使用由Babel在jsonata构建中生成的jsonata-es5.js版本。您可以通过克隆并运行npm t,或者从下载来实现这一点。

使用Andrew提供的JSONata-es5.min.js链接或JSONata报告中的JSONata.git/tags/v1.1.1/JSONata.js,在java版本1.8.0_152中使用nashorn引擎验证早期版本的JSONata功能。

现在有了JSONata JavaScript代码的java端口。有关详细信息,请参阅此问题的答案:

谢谢实际问题就像Andrew提到的,我使用的Nashorn脚本引擎版本不支持ES6功能。所以使用jsonata-es5.js为我解决了这个问题!
engine.put("input", new String(sample));
and 
engine.put("resultjson", resultjson);