首页 > 解决方案 > 如何使用方言“Mvel”检查流口水中的 if 语句值?

问题描述

我下面有一个json

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

如何使用规则 drools 中的 if 语句检查上述值?

我编辑了这个问题。这是为了流口​​水规则

例如我的规则是:

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

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

如果该值必须从第二个子 json 中获取"refDataId": 2,

标签: javajsondroolsrule-enginemvel

解决方案


您可以使用我使用过的任何 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 !");
                }
            }

        }

    }

推荐阅读