繁体   English   中英

在Java中使用JSONata会引发异常

[英]Using JSONata in Java throws exception

我正在尝试在java使用JSONata

JSONata version - 1.4.0
Java Version - 1.8

步骤:在类路径中包含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);

参考链接: 如何在Java中使用JSONata?

当我尝试使用此方法时,出现以下异常:

造成原因:jdk.nashorn.internal.runtime.ParserException::1445:12预期的(但找到了函数 validate(expr,input,environment){

在jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:294)在jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:279)在jdk.nashorn.internal.parser.AbstractParser.expectDontAdvance (AbstractParser.java:350),位于jdk.nashorn.internal.parser.AbstractParser.expect(AbstractParser.java:337),位于jdk.nashorn.internal.parser.Parser.functionExpression(Parser.java:2654),位于jdk.nashorn。位于jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773)的internal.parser.Parser.statement(Parser.java:875)位于jdk.nashorn.internal.parser.Parser.functionBody(Parser.java: 2901),位于jdk.nashorn.internal.parser.parser.memberExpression(Parser.java:2506),位于jdk.nashorn.internal.parser.Parser.memberExpression(Parser.java:2506),位于jdk.nashorn.internal.parser.Parser位于jdk的jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3147)的.leftHandSideExpression(Parser.java:2372)位于jdk的jdk.nashorn.internal.parser.Parser.expression(Parser.java:3282)。 nashorn.internal.parser.Par 位于jdk.nashorn.internal.parser.Parser.memberExpression(Parser.java:2511)的ser.primaryExpression(Parser.java:1992)位于jdk的jdk.nashorn.internal.parser.Parser.leftHandSideExpression(Parser.java:2372) jdk.nashorn.internal.parser.Parser.assignmentExpression(Parser.java:3353)的.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3147)在jdk.nashorn.internal.parser.Parser.variableStatement(Parser .java:1088)位于jdk.nashorn.internal.parser.Parser.statement(Parser.java:884)位于jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773)位于jdk.nashorn.internal处。在jdk.nashorn.internal.parser.Parser.parse(Parser.java:249)处的parser.Parser.program(Parser.java:709)在jdk.nashorn.internal.parser.Parser.parse(Parser.java:283)在jdk.nashorn.internal.runtime.Context.compile(Context.java:1284)在jdk.nashorn.internal.runtime.Context.compileScript(Context.java:1251)在jdk.nashorn.internal.runtime.Context.compileScript (Context.java:627)在jdk.nashorn.api.scripting.NashornScriptEngine.comp ileImpl(NashornScriptEngine.java:535)... 6个

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

从v1.2开始,jsonata.js使用ES6功能,因此您需要确保使用的Nashorn版本支持此功能。 或者,您可以使用由Babel在JSONata构建中生成的jsonata-es5.js版本。 您可以通过克隆GitHub存储库并运行npm t或从此处下载来获得此功能

您需要为函数Evaluate提供三个参数,您只给了表达式。 根据链接,您还应该提供以下内容

代码:

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

希望能帮助到你

我通过使用Andrew提供的jsonata-es5.min.js的链接或jsonata.git/tags/v1.1.1/jsonata.js jsonata.js来确认java version "1.8.0_152"使用nashorn引擎的JSONata早期版本是否起作用。 jsonata邮局。

现在有了JSONata JavaScript代码的Java端口。 有关详细信息,请参见此问题的答案: 如何在Java中使用JSONata?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM