在Java中使用JSONata引发异常
我正在尝试在java中使用JSONata 步骤: 在类路径中包含Jsonata.js 调用:在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")
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);