如何在Java中使用JSONata?

时间:2016-11-04 05:44:27

标签: java json

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

以下代码段显示了如何使用嵌入式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 repo以及try.jsonata.org的“Invoice”示例代码中下拉。

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

答案 1 :(得分:0)

您可以使用JSONata-Java项目:

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

  

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

答案 2 :(得分:0)

我刚刚发布了一个名为JSONata4Java的 JSONata的Java实现

maven中央:

JSONata4Java jar文件位于Maven Central的此处:https://search.maven.org/search?q=g:com.ibm.jsonata4java pom.xml依赖项

<dependency>
 <groupId>com.ibm.jsonata4java</groupId>
 <artifactId>JSONata4Java</artifactId>
 <version>1.0.0</version>
</dependency>

github:

名为JSONata4Java的jsonata项目的Java端口已发布在此处:https://github.com/IBM/JSONata4Java

如果您想提供帮助,请打印并签名相应的JSONata4Java cla文档并将其邮寄给我:

IBM Corporation
c/o Nathaniel Mills
16 Deer Hill Ln.
Coventry, CT, 06238, US
Attn: OSS CLA Processing

谢谢。