2016-07-11 6 views
0

私もJson形式を持つ型の暗黙的に定義された型変換器を追加する際に問題があります。問題がJson(またはSpray)と何か関係があるかどうかは疑問です。それに関してはMyDateです。ここでコンパニオンオブジェクト、implicits、およびJson

は、私が経験してる問題につながるコードの一部です:

case class MyDate(y: Int, m: Int, d: Int) 
object JsonProblem extends App { 
import spray.json.{DefaultJsonProtocol, _} 
object MyJsonProtocol extends DefaultJsonProtocol with NullOptions { 
    implicit val myDateFormat = jsonFormat3(MyDate) 
} 
import MyJsonProtocol._ 
val exampleDate = """{ "y": 2016, "m": 7, "d": 11 }""" 
val y: MyDate = exampleDate.parseJson.convertTo[MyDate] 
} 

をこれまでのところ予想通り、すべてが動作します。値yは、MyDateの適切なインスタンスをとります。 (私はこのコードを置く場所、それが重要とは思わないが)

さて、ケースクラス定義の後、私はこのようにコンパニオンオブジェクトを導入:

object MyDate { 
    implicit def convertMyDateToInt(x: MyDate): Int = ??? 
} 

はすぐに、私は上のコンパイラエラーを取得しますmyDateFormat行:*参照を解決できませんjsonFormat3このような署名が付いています。私の追加コードの目的は、(私の視点から)Jsonの解析には無関係です。これは、コードの他の部分で暗黙的にMyDateIntに変換したいからです。

コンパイラで生成されたコンパニオンオブジェクトを自分のものに置き換える(または強化する)ということと関係していると思います。しかし、問題はどういったもので、どうすれば回避できますか?

答えて

2

だけでコンパニオンを使用する機能に

import spray.json._ 

case class MyDate(y: Int, m: Int, d: Int) 

object MyDate { 
    implicit def convertMyDateToInt(x: MyDate): Int = ??? 
} 

object JsonProblem extends App { 
    object MyJsonProtocol extends DefaultJsonProtocol with NullOptions { 
    implicit val myDateFormat:RootJsonFormat[MyDate] = jsonFormat3(MyDate.apply) 
    } 
    import MyJsonProtocol._ 
    val exampleDate = """{ "y": 2016, "m": 7, "d": 11 }""" 
    val y: MyDate = exampleDate.parseJson.convertTo[MyDate] 
} 
+0

感謝を適用するオブジェクトを、私はそのことを考えている必要があります! – Phasmid

関連する問題