在 Java 中在运行时评估基于 Json 的规则

Evaluate Json based Rule at runtime in Java

我需要在运行时将数据库中以 json 格式存在的规则转换为 Java 中的代码。

例如,

{
  "id": "g-KqVJwrEMUYNOEVEnNxxqc",
  "rules": [
    {
      "id": "r-2VC4YQOkYu-lxkGgMABRc",
      "field": "firstName",
      "value": "Steve",
      "operator": "="
    },
    {
      "id": "r-B2Dd6eHO1rsZ-t1mfPk33",
      "field": "lastName",
      "value": "Vai",
      "operator": "="
    }
  ],
  "combinator": "and",
  "not": false
}

json 中的键将事先知道。此外,字段和运算符值将是固定的和已知的。

但我很困惑如何将上面的内容转换为代码,

inputObject.firstName.equals("Steve") && inputObject.lastName.equals("Vai")

非常感谢任何线索和想法!

您可以在运行时使用内省来评估字段

看起来像这样

Command command = parseJson(input); // transform input into a java object
InputObject o = getItFromSomewhere();    
bool finalResult;


// process each rule
for ( Rule r: command.rules ) {

   var fieldValue = o.getClass().getField(r.field).get(o);

   var currentResult;
   switch(r.operator) {
      case "=": currentResult = fieldValue.equals(r.value);
      break;
      case ">": currentResult = .... 
      ..etc
    } 

    // combine it with previous results; 
    switch(command.combinator) {
      case "and": 
         finalResult = finalResult && currentResult;
         break;
       case "or":
          finalResult = finalResult || currentResult;
     }

}
System.out.println(finalResult);

显然这不是确切的代码,只是为了展示如何在运行时动态检索字段值并对其求值。