Scala Jackson / Jerkson反序列化一个复杂的布尔查询(AST)?

时间:2014-03-21 17:42:51

标签: java json scala jackson boolean-expression

我正在处理一个使用布尔查询的相当复杂的用例。在这种特殊情况下,我需要能够在Scala类中存储JSON,以帮助在多个API中进行查询。为这些查询创建复杂的JSON结构相当容易,但将它们构造成适合Jackson的类具有一定的挑战性。 (用类型安全的语言看似非常重要)

这是一个JSON示例:

{
    "bool": {
        "must": [{
            "or": [
                {
                    "term": {
                        "tz": "America/Vancouver"
                    }
                }, {
                    "and": [
                        {
                            "term": {
                                "gender": "female"
                            }
                        }, {
                            "term": {
                                "age": 30
                            }
                        }
                    ]
                }
            ]
        }]
    }
}

您可以看到上面有嵌套运算符。所以建立一些东西来模拟这个是相当棘手的。有没有已经解决了这个问题的回购?有没有人有一个简单的解决方案?

case class Condition(
  @(JsonProperty@field)("and")
  val and: Option[List[FormulaCondition]],

  @(JsonProperty@field)("or")
  val or: Option[List[FormulaCondition]],

  @(JsonProperty@field)("field")
  val field: Option[String],

  @(JsonProperty@field)("comparison")
  val comparison: Option[String],

  @(JsonProperty@field)("value")
  val value: Option[String]

)

到目前为止,我刚刚创建了一个名为Condition的基类来处理所有字符串字段,但这远不是一个优雅的解决方案。如果"term"Int而不是String,则此类失败。真的很感谢你的帮助。

0 个答案:

没有答案