更新:仔细查看我的其余代码,发现其他地方存在问题,这就是为什么它不起作用的原因。谢谢
我想知道是否可以使用json4序列化程序反序列化和使用通用对象。
我的json数据具有相似的特征,其中一部分具有不同的信息
例如,我有超级英雄,而他的技能有所不同
* Json数据
{
"type": "Blue",
"name": "Aquaman",
"age": "4",
"skills": {
"Cooking": 9,
"Swimming": 4
}
}
{
"type": "Red",
"name": "Flash",
"age": "8",
"skills": {
"Speed": 9,
"Punctual": 10
}
}
所以我想做的是
case class Superhero[T](
`type`: String,
name: String,
age: Int,
skills: T
)
以及相应的技能案例类别
case class BlueSkill(
Cooking: Int,
Swimming: Int
)
case class RedSkill(
Speed: Int,
Punctual: Int
)
但是当我阅读并尝试将其映射到另一个对象时,我在数据框中得到了null
。
val bluePerson = read[Superhero[BlueSkill]](jsonBody)
所以想知道json4是否可以读取通用对象。
答案 0 :(得分:0)
当然可以,为什么它的工作方式与非泛型类型有所不同?
import org.json4s.native.{Serialization => S}
import org.json4s.DefaultFormats
implicit val fmts = DefaultFormats
S.read[Superhero[RedSkill]]("""|{
| "type": "Red",
| "name": "Flash",
| "age": 8,
| "skills": {
| "Speed": 9,
| "Punctual": 10
| }
|}""".stripMargin)
但是坦率地说,我会远离json4s或任何其他自省的废话,而改用基于类型类的库,例如circe。