2017-06-02 61 views
1

我喜歡在我的案例類中使用casecodecN或無定形解碼器,但是其中一個字段在使用json時具有不同的類型。Argonaut解碼器如何更改案例類別中一個值的類型

考慮,其中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) 
) 

這是確定短期case類,但繁瑣對於更大的。

有沒有辦法我使用派生解碼器的情況下,但只改變一個值類型?

感謝

回答

1

你可以使用隱式的皈依你的類中:

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

謝謝你,這是一個不錯的選擇。但是,如果我這樣做,不清楚哪個字段可以有字符串雙打。如果'a'格式化,我仍然希望它成爲解碼失敗。 – Stephen

相關問題