2016-07-11 11 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