2014-09-19 9 views
1

json과 case 클래스를 구문 분석하기 위해 argonaut를 사용하고 있습니다.json 값 "aaa, bbb"를 argonaut를 사용하여 "Seq [String]"으로 변환하는 방법은 무엇입니까?

JSON :

{ 
    "name" : "Mike", 
    "email" : "[email protected], [email protected]" 
} 

스칼라 : 오류가

case class User(agentName: String, emails: Seq[String]) 

object User { 
    implicit def DecodeJson: DecodeJson[User] = 
    casecodec2(User.apply, User.unapply)("name", "email") 
} 

코드를 컴파일 할 수 없다

:

Error:(17, 65) could not find implicit value for evidence parameter of type   
    argonaut.EncodeJson[Seq[String]] 
    casecodec2(User.apply, User.unapply)("name", "email") 

그것을 해결하기 위해 어떻게 내가 [email protected], [email protected]을 구문 분석 할 수 Seq("[email protected]", "[email protected]")? 당신이 정말로 단지 디코더를 필요로하는 경우,

case class User(agentName: String, emails: Seq[String]) 

object User { 
    implicit val CodecJson: CodecJson[User] = casecodec2[String, String, User](
    (n, e) => User(n, e.split(", ")), 
    u => Some((u.agentName, u.emails.mkString(", "))) 
)("name", "email") 
} 

을 또는 : 당신은 구문 분석 JSON에 다음과 같은 작업을 수행해야하는 경우가 그것을 할 수 있도록 casecodec2

답변

0

인수는, 함수입니다

object User { 
    implicit def DecodeJson: DecodeJson[User] = 
    jdecode2L((n: String, e: String) => User(n, e.split(", ")))("name", "email") 
} 

casecodecN은 사례 클래스 생성자 및 추출기와 함께 사용하기 편리하도록 만들어졌지만 그보다 훨씬 유연합니다.