2014-09-19 35 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是为方便使用案例类构造函数和提取器而创建的,但它比这更灵活。

相关问题