在Java中使用JSONata会引发异常

时间:2018-01-18 02:06:57

标签: java json exception jsonata

我正在Aws::Client::ClientConfiguration config; config.region = "us-gov-west-1"; config.endpointOverride = "s3-us-gov-west-1.amazonaws.com"; Aws::S3::S3Client s3_client(config); 中使用JSONata

java

步骤: 在类路径中包含JSONata version - 1.4.0 Java Version - 1.8

调用:

Jsonata.js

参考链接: How can I use JSONata in Java?

当我尝试使用此功能时,我会得到以下异常:

  

引起:jdk.nashorn.internal.runtime.ParserException:   :1445:12预期(但发现功能评估(expr,输入,   环境){

     

在   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.internal.parser.Parser.statement(Parser.java:875)at   jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773)at at   jdk.nashorn.internal.parser.Parser.functionBody(Parser.java:2901)at at   jdk.nashorn.internal.parser.Parser.functionExpression(Parser.java:2663)   在   jdk.nashorn.internal.parser.Parser.memberExpression(Parser.java:2506)   在   jdk.nashorn.internal.parser.Parser.leftHandSideExpression(Parser.java:2372)   在   jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3147)   在jdk.nashorn.internal.parser.Parser.expression(Parser.java:3282)at   jdk.nashorn.internal.parser.Parser.primaryExpression(Parser.java:1992)   在   jdk.nashorn.internal.parser.Parser.memberExpression(Parser.java:2511)   在   jdk.nashorn.internal.parser.Parser.leftHandSideExpression(Parser.java:2372)   在   jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3147)   在   jdk.nashorn.internal.parser.Parser.assignmentExpression(Parser.java:3353)   在   jdk.nashorn.internal.parser.Parser.variableStatement(Parser.java:1088)   在jdk.nashorn.internal.parser.Parser.statement(Parser.java:884)at   jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773)at at   jdk.nashorn.internal.parser.Parser.program(Parser.java:709)at at   jdk.nashorn.internal.parser.Parser.parse(Parser.java:283)at at   jdk.nashorn.internal.parser.Parser.parse(Parser.java:249)at at   jdk.nashorn.internal.runtime.Context.compile(Context.java:1284)at at   jdk.nashorn.internal.runtime.Context.compileScript(Context.java:1251)   在   jdk.nashorn.internal.runtime.Context.compileScript(Context.java:627)   在   jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:535)   ... 6 moree

任何有关如何使用它的帮助都会很有用。

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

代码:

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

希望有所帮助

答案 2 :(得分:0)

我确认早期版本的JSONata在java version "1.8.0_152"中使用nashorn引擎,使用Andrew提供的jsonata-es5.min.js链接或jsonata repostiory的jsonata.git/tags/v1.1.1/jsonata.js链接。

答案 3 :(得分:0)

现在有了JSONata JavaScript代码的Java端口。请查看该问题的答案以获取详细信息:How can I use JSONata in Java?