2014-09-19 41 views
1

我正在使用argonaut解析json到案例類。如何使用argonaut將json值「aaa,bbb」轉換爲「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]")

回答

0

casecodec2的參數是函數,因此,如果您需要在解析的JSON像這樣進行操作,你可以做到這一點有:

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") 
} 

或者,如果你真的只需要解碼器:

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

casecodecN是爲方便使用案例類構造函數和提取器而創建的,但它比這更靈活。

相關問題