使用流口水以松散构造的JSON实体形式处理事实的优雅方法?

Toa*_*ter 5 java drools

我正在研究一种服务,该服务可以转换,转换和规范化作为半结构化json接收的记录。要求如下:

  • 相同类型(类型-人,地址等)的传入json实体可能不具有相同的属性。
  • 某些属性可能不会出现在给定类型的每个实体中。
  • 可以重命名属性。
  • 传入的json实体最初未输入类型。可以通过分析可用字段来确定传入实体的类型。因此,我认为需要使用规则将实体重新分类为Drools / Java类。
  • 不能保证给定属性中的数据总是相同类型的(尽管所有内容都可以默认为字符串)。

当然,这些要求与Java相反,并且其他文章中的评论(尽管几年前)已经指出,使用Drools处理json很难。

是否有办法在上述情况下和谐地应用Drools,或者是否有最小的限制(除了采用强数据模型的明显解决方案之外)可以纠正这种情况?

ung*_*ood 1

我可以想到一些可能适合您的方法:

  1. 将 JSON 事实解析为内存结构(使用 Gson 或 Jackson 之类的东西),并将这些结构作为事实插入到 drools 中。然后应该可以使用 LHS 编写可以匹配解析事实的规则。还可以通过 Gson/Jackson API 更新事实。
  2. 通过创建(如果我记得的话)RuleImpl 类的实例,可以直接用 Java 编写流口水事实。然后,您可以提供任意 LHS,它可以根据您的需要解析/匹配任意 JSON。