2016-11-04 3 views
1

JSONata ist eine Ausdruckssprache, die JSON-Datenstrukturen abfragt und transformiert.Wie kann ich JSONata in Java verwenden?

Ich finde, dass aktuelle Implementierungen von JSONata nur in Javascript sind. (https://github.com/jsonata-js/jsonata)

Ich möchte JSONata in meinem Java-Code verwenden. Es wird das Leben viel einfacher machen, JSON-Dokumente in Java zu manipulieren.

Ein möglicher Weg könnte die Verwendung der Standard-Java-Klassen unter javax.script-Paket sein, um mit der Javascript-basierten JSONata-Implementierung zu interagieren.

Hat schon jemand das getan? Gibt es einen Beispielcode, um zu demonstrieren, wie dies erreicht werden kann?

Hat jemand andere Mechanismen zur Verwendung von JSONata in Java implementiert?

+0

https://github.com/jayway/JsonPath Vielleicht? –

+1

JsonPath sieht gut aus, obwohl ich zu dieser Zeit Jsonata brauchte. Schätze die Informationen. –

Antwort

3

Der folgende Ausschnitt zeigt, wie Sie den JSONata Prozessor von Java über das eingebettete JavaScript-Engine ...

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); 

In diesem Beispiel berufen könnten, die jsonata.js Datei aus dem JSONata GitHub Repo nach unten gezogen wurde sowie den Beispielcode 'Rechnung' von try.jsonata.org.

Zum Behandeln von Fehlern ist zusätzlicher Code erforderlich, aber dies gibt die allgemeine Idee.

+0

Das ist ausgezeichnet. Ich habe eine Bibliothek für mich basierend auf diesem Code erstellt. Vielen Dank. –

Verwandte Themen