Scala Argonaut解码器如何更改case类中一个值的类型

Scala Argonaut解码器如何更改case类中一个值的类型,scala,argonaut,Scala,Argonaut,我想对我的case类使用casecocoden或无形状解码器,但其中一个字段的类型与json不同 考虑一下,json中的b是一个类似“1.23”的字符串,但我希望它是一个双精度字符串 case class Foo(a: Double, b: Double) 如果我使用casecodec2,它将出错,因为b是一个字符串 casecodec2(Foo.apply, Foo.unapply)("a", "b") 所以我必须手动编写DecodeJson DecodeJson[Foo]( c =&

我想对我的case类使用
casecocoden
或无形状解码器,但其中一个字段的类型与json不同

考虑一下,json中的
b
是一个类似
“1.23”
的字符串,但我希望它是一个双精度字符串

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)
)
DecodeJson[Foo](
c=>
为了{

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

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

谢谢,这是一个很好的选择。但是,如果我这样做,它不清楚哪个字段可以有字符串双精度。如果
a
的格式是那样的,我仍然希望它是一个解码失败。