Argonaut解码器如何更改案例类中的一个值的类型

时间:2017-06-02 01:21:58

标签: scala argonaut

我想在我的案例类中使用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)
)

对于短案例类别来说这是好的,但对于较大的类别来说则很乏味。

我是否有办法使用派生的解码器但只改变一种值类型?

由于

1 个答案:

答案 0 :(得分:1)

您可以在班级中使用隐式转换:

case class Foo(a: Double, b: Double){
   implicit def string2Double(s: String): Double = augmentString(s).toDouble
}