使用泛型反序列化 json4s
deserializing json4s with generic type
更新:仔细查看我的其余代码,我在其他地方遇到了问题,这就是它无法正常工作的原因。谢谢
我想知道是否可以使用 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
)
和各自的技能案例class
case class BlueSkill(
Cooking: Int,
Swimming: Int
)
case class RedSkill(
Speed: Int,
Punctual: Int
)
但是当我阅读并尝试将其映射到另一个对象时,我在数据框中得到 null
。
val bluePerson = read[Superhero[BlueSkill]](jsonBody)
所以想知道 json4.
是否可以读取通用对象
当然可以,为什么它的工作方式与非泛型类型有任何不同?
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。
更新:仔细查看我的其余代码,我在其他地方遇到了问题,这就是它无法正常工作的原因。谢谢
我想知道是否可以使用 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
)
和各自的技能案例class
case class BlueSkill(
Cooking: Int,
Swimming: Int
)
case class RedSkill(
Speed: Int,
Punctual: Int
)
但是当我阅读并尝试将其映射到另一个对象时,我在数据框中得到 null
。
val bluePerson = read[Superhero[BlueSkill]](jsonBody)
所以想知道 json4.
是否可以读取通用对象当然可以,为什么它的工作方式与非泛型类型有任何不同?
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。