我使用argonaut将json解析为case类。
JSON:
{
"name" : "Mike",
"email" : "a@aaa.com, b@bbb.com"
}
Scala的:
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")
如何修复它以便我可以将a@aaa.com, b@bbb.com
解析为Seq("a@aaa.com", "b@bbb.com")
?
答案 0 :(得分: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
是为了方便使用案例类构造函数和提取器而创建的,但它比这更灵活。