我无法为Json4s编写自定义序列化程序来处理以下情况。我有case类:Json4s超类的序列化
trait Condition
case class BasicExpression (field:String, operator:String, value:String) extends Condition
case class BooleanExpression (val leftExpr: Condition, val logicalOperator:String,
val rightExpr: Condition) extends Condition
,我希望能够读取JSON两个BasicExpression
和BooleanExpression
使用,例如:
var jsonStringBasic:String = """ {"field":"name","operator":"=","value":"adam"}""";
var jsonStringBoolean:String = """{"leftExpr":{"leftExpr":{"field":"field1", "operator":"=", "value":"value1"}, "logicalOperator":"AND", "rightExpr":{"field":"field2","operator":">","value":"500"}}, "logicalOperator":"AND", "rightExpr": {"field":"field3","operator":"<","value":"10000"}}""";
var jValueBasic:JValue = parse(jsonStringBasic, false);
var readCBasic = jValueBasic.extract[Condition];
我明白了定制串行器是如何工作的读取BasicExpression
,并且我可以使用SimpleTypeHints
,但不必为每个Condition
都膨胀JSON。我也可以尝试extract[BooleanExpression]
,如果失败尝试extract[BasicExpression]
,但看起来很难看。是否可以编写自定义序列化程序来处理这个事实:BooleanCondition
本身将包含另一个Condition
,因此我可以extract[Condition]
?
感谢您的建议 - 我转向Gson了一下,但当Gson不支持Scala列表或地图时遇到了更多问题,于是我回到Json4s,想出了如何编写serialiser – adambriffett