Skip to content

A pure Java implementation of JsonLogic without using the Nashorn JS engine

License

Notifications You must be signed in to change notification settings

falu2010-netflix/json-logic-java

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

json-logic-java

This parser accepts JsonLogic rules and executes them in Java without Nashorn.

The JsonLogic format is designed to allow you to share rules (logic) between front-end and back-end code (regardless of language difference), even to store logic along with a record in a database. JsonLogic is documented extensively at JsonLogic.com, including examples of every supported operation and a place to try out rules in your browser.

Installation

I am currently in the process of making this artifact available in a public repository, but for now, you can download/clone the project and build the jar file using:

./gradlew build

To install the jar in your local repository for reference from other local projects, use:

./gradlew build install

Examples

The public API for json-logic-java attempts to mimic the public API of the original Javascript implementation as close as possible. For this reason, the API is loosely typed in many places. This implementation relies on duck-typing for maps/dictionaries and arrays: if it looks and feels like an array, we treat it like an array.

// Create a new JsonLogic instance. JsonLogic is thread safe.
JsonLogic jsonLogic = new JsonLogic();

// Set up some JSON and some data.
String expression = "{\"*\": [{\"var\": \"x\"}, 2]}";
Map<String, Integer> data = new HashMap<>();
data.put("x", 10);

// Evaluate the result.
double result = (double) jsonLogic.apply(expression, data);
assert result == 20;

You can add your own operations like so:

// Register an operation.
jsonLogic.addOperation("greet", (args) -> "Hello, " + args[0] + "!");

// Evaluate the result.
String result = (String) jsonLogic.apply("{\"greet\": [\"Sam\"]}", null);
assert "Hello, Sam!".equals(result);

There is a truthy static method that mimics the truthy-ness rules of Javascript:

assert JsonLogic.truthy(0) == false;
assert JsonLogic.truthy(1) == true;
assert JsonLogic.truthy("") == false;
assert JsonLogic.truthy("Hello world!") == true;

// etc...

About

A pure Java implementation of JsonLogic without using the Nashorn JS engine

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%