1
は、私の目標は、次のモデルに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型に直接マッピングします。
- (Btw:これはより洗練されたソリューションであれば、コンテナタイプを
Container[A <: Content]
に変更するために公開されています)。
これをcirceでデコードするにはどうすればよいでしょうか?この場合、自動デコードは機能しません。
編集:JSON構造のドキュメントは?mixed (object, integer, bool)
としてコンテンツフィールドを説明し、それはまた、簡単なInt
またはその代わりにケースクラスオブジェクトのBoolean
することができます。しかし、今のところ、これらの2つのタイプを無視することは大丈夫でしょう(そのための解決策があるのはいいでしょう)。