0

我正在尝试JSONatajava.

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 预期(但发现函数评估(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) 在 jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773) 在 jdk.nashorn.internal.parser.Parser.functionBody(Parser.java: 2901) 在 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章.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) 在 jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773) 在 jdk.nashorn.internal.parser .Parser.program(Parser.java:709) 在 jdk.nashorn.internal.parser。Parser.parse(Parser.java:283) 在 jdk.nashorn.internal.parser.Parser.parse(Parser.java:249) 在 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.compileImpl(NashornScriptEngine .java:535) ... 6 更多

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

4

4 回答 4

1

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

于 2018-01-18T12:05:01.973 回答
0

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

代码 :

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

希望能帮助到你

于 2018-01-18T06:37:15.743 回答
0

java version "1.8.0_152"我确认使用 Andrew 提供的 jsonata-es5.min.js 链接或jsonata.git/tags/v1.1.1/jsonata.js来自 jsonata 存储库的 JSONata 的早期版本与 nashorn 引擎一起使用。

于 2018-03-31T11:16:23.407 回答
0

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

于 2019-03-07T00:04:42.847 回答