code: @Override
      public Object parse(IGroup group, JsonRuleParser parser) {
          StringBuffer operate = new StringBuffer();
  
          // NOT
          if (group.getNot() != null && group.getNot()) {
              operate.append("( NOT ");
          }
  
          if (group.getRules().size() > 0) {
              operate.append("( ");
          }
  
          // rules
          List<Object> params = new ArrayList<Object>();
          for (int i = 0; i < group.getRules().size(); i++) {
              // json parse
              Operation operation = (Operation) parser.parse(group.getRules().get(i));
  
              // operate
              operate.append(operation.getOperate());
              if (i < group.getRules().size() - 1) {
                  operate.append(EnumCondition.AND.equals(group.getCondition()) ? " AND " : " OR ");
              }
              // params
              if (operation.getHasValue()) {
                  if (operation.getValue() instanceof List) {
                      params.addAll((Collection<?>) operation.getValue());
                  } else {
                      params.add(operation.getValue());
                  }
              }
          }
  
          if (group.getRules().size() > 0) {
              operate.append(" )");
          }
          if (group.getNot() != null && group.getNot()) {
              operate.append(" )");
          }
  
          return new Operation(operate, params);
      }
docs: 解析
  @param group
  @param parser
  @return