我试图为其编写的 JSON 对象DecodeJson[T]
包含一个不同“类型”的数组(这意味着其元素的 JSON 结构是不同的)。唯一的共同特征是type
可用于区分类型的字段。所有其他领域都是不同的。例子:
{
...,
array: [
{ type: "a", a1: ..., a2: ...},
{ type: "b", b1: ...},
{ type: "c", c1: ..., c2: ..., c3: ...},
{ type: "a", a1: ..., a2: ...},
...
],
...
}
使用 argonaut,是否可以将 JSON 数组映射到 Scala Seq[Element]
,其中Element
是 type 的合适案例类的超类型ElementA
,ElementB
等等?
我做了同样的事情,play-json
这很容易(基本上是Reads[Element]
评估该type
领域并相应地转发到更具体的Reads
)。但是,我找不到用 argonaut 执行此操作的方法。
编辑:示例
Scala 类型(我希望使用):
case class Container(id: Int, events: List[Event])
sealed trait Event
case class Birthday(name: String, age: Int) extends Event
case class Appointment(start: Long, participants: List[String]) extends Event
case class ... extends Event
JSON实例(不在我的控制之下):
{
"id":1674,
"events": {
"data": [
{
"type": "birthday",
"name": "Jones Clinton",
"age": 34
},
{
"type": "appointment",
"start": 1675156665555,
"participants": [
"John Doe",
"Jane Doe",
"Foo Bar"
]
}
]
}
}