1

我想为我的案例类使用casecodecNor shapeless 解码器,但是当它是 json 时,其中一个字段具有不同的类型。

考虑一下,b在 json 中是一个类似的字符串"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)
)

这对于短案例类来说是可以的,但对于大类来说就很乏味了。

有没有办法使用派生的解码器但只更改一个值类型?

谢谢

4

1 回答 1

1

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

case class Foo(a: Double, b: Double){
   implicit def string2Double(s: String): Double = augmentString(s).toDouble
}
于 2017-06-02T01:26:24.603 回答