如何使用方言“ Mvel”检查流口水中的if语句值?

时间:2018-08-06 06:38:36

标签: java json drools rule-engine mvel

我在下面有一个json

"root":[
  {
    "refDataId": 1,
    "children": [
      {
        "refDataId": 20
      },
      {
        "refDataId": 99,
        "otherValue": "Facility"
      }
    ]
  },
  {
    "refDataId": 2,
    "children": [
      {
        "refDataId": 30
      },
      {
        "refDataId": 99,
        "otherValue": "Officer"
      }
    ]
  }
]

如何在规则流口水中使用if语句检查上面的值?

我编辑了问题。这是流口水的规则

例如我的规则是:

rule "test"
    when
        RuleEngine(inputObject!.adultHealth!.children contains 99)
    then
        info("children contains value 99");
end

以及如何检查"refDataId": 99,"otherValue": "Officer"的值?

如果值必须来自第二个子json "refDataId": 2,

2 个答案:

答案 0 :(得分:1)

您可以使用任何json解析器提取数据 我用过org.json

以下代码尝试从json数据中找到OFFICER。

JSONObject obj = new JSONObject(jsonString);

    JSONArray objArray = obj.optJSONArray("root");

    for (Object jo : objArray) {
        JSONObject arrayElement = new JSONObject(jo.toString());
        JSONArray childrenArray = arrayElement.getJSONArray("children");

        for (Object child : childrenArray) {

            JSONObject childJo = new JSONObject(child.toString());

            if (Integer.parseInt(childJo.get("refDataId").toString()) == 99) {
                if (childJo.get("otherValue").toString().equals("Officer")) {
                    System.out.println("Success Officer Found !");
                }
            }

        }

    }

答案 1 :(得分:0)

在这里Nested JSON iterations using drools Fluent API看来,创建与JSON结构相对应的数据对象就足够了。