在 Java 中使用 JSONata 会抛出异常
Using JSONata in Java throws exception
我正在尝试在 java
中使用 JSONata
。
JSONata version - 1.4.0
Java Version - 1.8
步骤:
class 路径中包含 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);
参考资料link:
当我尝试使用它时出现以下异常:
Caused by: jdk.nashorn.internal.runtime.ParserException:
:1445:12 Expected ( but found function evaluate(expr, input,
environment) {
at
jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:294)
at
jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:279)
at
jdk.nashorn.internal.parser.AbstractParser.expectDontAdvance(AbstractParser.java:350)
at
jdk.nashorn.internal.parser.AbstractParser.expect(AbstractParser.java:337)
at
jdk.nashorn.internal.parser.Parser.functionExpression(Parser.java:2654)
at jdk.nashorn.internal.parser.Parser.statement(Parser.java:875) at
jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773) at
jdk.nashorn.internal.parser.Parser.functionBody(Parser.java:2901) at
jdk.nashorn.internal.parser.Parser.functionExpression(Parser.java:2663)
at
jdk.nashorn.internal.parser.Parser.memberExpression(Parser.java:2506)
at
jdk.nashorn.internal.parser.Parser.leftHandSideExpression(Parser.java:2372)
at
jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3147)
at jdk.nashorn.internal.parser.Parser.expression(Parser.java:3282) at
jdk.nashorn.internal.parser.Parser.primaryExpression(Parser.java:1992)
at
jdk.nashorn.internal.parser.Parser.memberExpression(Parser.java:2511)
at
jdk.nashorn.internal.parser.Parser.leftHandSideExpression(Parser.java:2372)
at
jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3147)
at
jdk.nashorn.internal.parser.Parser.assignmentExpression(Parser.java:3353)
at
jdk.nashorn.internal.parser.Parser.variableStatement(Parser.java:1088)
at jdk.nashorn.internal.parser.Parser.statement(Parser.java:884) at
jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773) at
jdk.nashorn.internal.parser.Parser.program(Parser.java:709) at
jdk.nashorn.internal.parser.Parser.parse(Parser.java:283) at
jdk.nashorn.internal.parser.Parser.parse(Parser.java:249) at
jdk.nashorn.internal.runtime.Context.compile(Context.java:1284) at
jdk.nashorn.internal.runtime.Context.compileScript(Context.java:1251)
at
jdk.nashorn.internal.runtime.Context.compileScript(Context.java:627)
at
jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:535)
... 6 moree
任何关于如何使用它的帮助都会很有用。
您需要提供具有三个参数的函数 Evaluate,您只给出了表达式。基于 link 你还应该提供 ff
代码:
engine.put("input", new String(sample));
and
engine.put("resultjson", resultjson);
希望对您有所帮助
自 v1.2 起,jsonata.js 使用 ES6 功能,因此您需要确保您使用的 Nashorn 版本支持此功能。或者,您可以使用 JSONata 构建中由 Babel 生成的 jsonata-es5.js 版本。您可以通过克隆 GitHub repo and running npm t
, or by downloading it from here.
我确认早期版本的 JSONata 与 java version "1.8.0_152"
中的 nashorn 引擎一起使用 Andrew 提供的 link 到 jsonata-es5.min.js 或 jsonata.git/tags/v1.1.1/jsonata.js
jsonata 存储库。
JSONata Java脚本代码现在有一个 Java 端口。详情请看这个问题的答案:
我正在尝试在 java
中使用 JSONata
。
JSONata version - 1.4.0
Java Version - 1.8
步骤:
class 路径中包含 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);
参考资料link:
当我尝试使用它时出现以下异常:
Caused by: jdk.nashorn.internal.runtime.ParserException: :1445:12 Expected ( but found function evaluate(expr, input, environment) {
at jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:294) at jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:279) at jdk.nashorn.internal.parser.AbstractParser.expectDontAdvance(AbstractParser.java:350) at jdk.nashorn.internal.parser.AbstractParser.expect(AbstractParser.java:337) at jdk.nashorn.internal.parser.Parser.functionExpression(Parser.java:2654) at jdk.nashorn.internal.parser.Parser.statement(Parser.java:875) at jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773) at jdk.nashorn.internal.parser.Parser.functionBody(Parser.java:2901) at jdk.nashorn.internal.parser.Parser.functionExpression(Parser.java:2663) at jdk.nashorn.internal.parser.Parser.memberExpression(Parser.java:2506) at jdk.nashorn.internal.parser.Parser.leftHandSideExpression(Parser.java:2372) at jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3147) at jdk.nashorn.internal.parser.Parser.expression(Parser.java:3282) at jdk.nashorn.internal.parser.Parser.primaryExpression(Parser.java:1992) at jdk.nashorn.internal.parser.Parser.memberExpression(Parser.java:2511) at jdk.nashorn.internal.parser.Parser.leftHandSideExpression(Parser.java:2372) at jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3147) at jdk.nashorn.internal.parser.Parser.assignmentExpression(Parser.java:3353) at jdk.nashorn.internal.parser.Parser.variableStatement(Parser.java:1088) at jdk.nashorn.internal.parser.Parser.statement(Parser.java:884) at jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773) at jdk.nashorn.internal.parser.Parser.program(Parser.java:709) at jdk.nashorn.internal.parser.Parser.parse(Parser.java:283) at jdk.nashorn.internal.parser.Parser.parse(Parser.java:249) at jdk.nashorn.internal.runtime.Context.compile(Context.java:1284) at jdk.nashorn.internal.runtime.Context.compileScript(Context.java:1251) at jdk.nashorn.internal.runtime.Context.compileScript(Context.java:627) at jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:535) ... 6 moree
任何关于如何使用它的帮助都会很有用。
您需要提供具有三个参数的函数 Evaluate,您只给出了表达式。基于 link 你还应该提供 ff
代码:
engine.put("input", new String(sample));
and
engine.put("resultjson", resultjson);
希望对您有所帮助
自 v1.2 起,jsonata.js 使用 ES6 功能,因此您需要确保您使用的 Nashorn 版本支持此功能。或者,您可以使用 JSONata 构建中由 Babel 生成的 jsonata-es5.js 版本。您可以通过克隆 GitHub repo and running npm t
, or by downloading it from here.
我确认早期版本的 JSONata 与 java version "1.8.0_152"
中的 nashorn 引擎一起使用 Andrew 提供的 link 到 jsonata-es5.min.js 或 jsonata.git/tags/v1.1.1/jsonata.js
jsonata 存储库。
JSONata Java脚本代码现在有一个 Java 端口。详情请看这个问题的答案: