我想在我的案例类中使用casecodecN
或无形解码器,但是当它是json时,其中一个字段有不同的类型。
考虑一下,json中的b
是"1.23"
之类的字符串,但我希望它是Double。
case class Foo(a: Double, b: Double)
如果我使用casecodec2,则会出错,因为b
是一个字符串
casecodec2(Foo.apply, Foo.unapply)("a", "b")
所以我必须手动写DecodeJson
DecodeJson[Foo](
c =>
for {
a <- (c --\ "a").as[Double]
b <- (c --\ "b").as[String].map(_.toDouble)
} yield Foo(a, b)
)
对于短案例类别来说这是好的,但对于较大的类别来说则很乏味。
我是否有办法使用派生的解码器但只改变一种值类型?
由于
答案 0 :(得分:1)
您可以在班级中使用隐式转换:
case class Foo(a: Double, b: Double){
implicit def string2Double(s: String): Double = augmentString(s).toDouble
}