簡體   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