我的目标是将 JSON 转换为以下模型:
case class Container(typeId: Int, timestamp: Long, content: Content)
sealed trait Content
case class ContentType1(...) extends Content
case class ContentType2(...) extends Content
case class ContentType3(...) extends Content
- 有一种容器类型,其结构看起来总是相同的。
- 容器的
content
类型由看起来完全不同的类型表示(关于属性的数量和类型)。但是,所有内容类型在编译时都是已知的,并实现了密封特征。 - 容器的
typeId
属性表示内容类型。例如,具有类型等的N
均值的值。content
ContentTypeN
- JSON 结构看起来与您期望的完全一样,并直接映射到上面显示的 Scala 类型。
Container[A <: Content]
(顺便说一句:如果这是一个更优雅的解决方案,我愿意将容器类型更改为)。
用circe解码它的好方法是什么?我猜在这种情况下自动解码不起作用。
编辑:json结构的文档将内容字段描述为?mixed (object, integer, bool)
,因此它也可以是简单的Int
或Boolean
代替案例类对象。但是现在可以忽略这两种类型(尽管有一个解决方案会很好)。