JsonLogic的Java实现不起作用

时间:2018-01-09 19:15:18

标签: java boolean-logic

是否有人成功使用Java implementationJsonLogic

此规则

{"==" : [ { "var" : "code" }, "ER"]}

使用此数据给出正确答案(true)

{"code": "ER", "name": "Exploratory Research"}

使用javascript playground

但是,这个Java代码

JavaJsonLogic jsonLogic = JavaJsonLogic.INSTANCE;
String rule = "{\"==\" : [ { \"var\" : \"code\" }, \"ER\"]}";
JsonObject data = new JsonObject();
data.addProperty("code", "ER");
data.addProperty("name", "Exploratory Research")
System.out.println(jsonLogic.apply(rule, data)););

返回false

2 个答案:

答案 0 :(得分:1)

        JsonLogic jsonLogic = new JsonLogic();
        String rule = "{\"==\" : [ { \"var\" : \"code\" }, \"ER\"]}";
        //JsonObject data = new JsonObject();
        Map<String, Object> data = new HashMap<>();
        data.put("name", "Exploratory Research");
        data.put("code", "ER");
        jsonLogic.apply(rule, data);
    

我使用哈希图来代替 JsonObject 填充值。结果是真的。而且我还使用 https://mvnrepository.com/artifact/io.github.jamsesso 来解析 jsonLogic 字符串并通过 jsonlogic 验证数据。

答案 1 :(得分:-1)

dmillerw也根据你所关注的jsonlogic规范为java做了jsonlogic实现。我只是尝试从下面的URL中获取代码库,并使用您的测试数据,它就像一个魅力。

https://github.com/dmillerw/json-logic-java

以下是我在junit中测试您需求的内容:

    String testjson = **"[[{\"==\" : [ { \"var\" : \"code\" }, \"ER\"]},{\"code\": \"ER\", \"name\": \"Exploratory Research\"},true]]";**
    JsonArray testArray = gson.fromJson(testjson, JsonArray.class);

    for (JsonElement element : testArray) {
        JsonArray array = element.getAsJsonArray();
        JsonElement test = array.get(0);
        JsonElement data = array.get(1);
        JsonElement expected = array.get(2);
        System.out.println(**JsonLogic.apply(test, data)**);

}