如何在Java中使用JSONata?

JSONata是一种用于查询和转换JSON数据结构的表达式语言。

我发现JSONata的当前实现仅在Javascript中。 ( https://github.com/jsonata-js/jsonata )

我想在我的Java代码中使用JSONata。 它将使用Java操作JSON文档变得更加容易。

一种可能的方法是使用javax.script包下的标准Java类与基于Javascript的JSONata实现进行交互。

有没有人这样做过? 有没有示例代码来演示如何实现这一目标?

有人在Java中实现了使用JSONata的其他机制吗?

以下代码段显示了如何使用嵌入式JavaScript引擎从Java调用JSONata处理器…

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); // read and JSON.parse the input data byte[] sample = Files.readAllBytes(Paths.get("sample.json")); engine.put("input", new String(sample)); Object inputjson = engine.eval("JSON.parse(input);"); // query the data String expression = "$sum(Account.Order.Product.(Price * Quantity))"; // JSONata expression Object expr = inv.invokeFunction("jsonata", expression); Object resultjson = inv.invokeMethod(expr, "evaluate", inputjson); // JSON.stringify the result engine.put("resultjson", resultjson); Object result = engine.eval("JSON.stringify(resultjson);"); System.out.println(result); 

在此示例中,jsonata.js文件已从JSONata GitHub存储库中下拉,以及来自try.jsonata.org的“Invoice”示例代码。

处理错误需要额外的代码,但这给出了一般的想法。

您可以使用JSONata-Java项目:

https://github.com/cow-co/jsonata-java

JSONata JSON查询和转换语言的原始(JavaScript)解释器的Java端口。