2014-09-19 3 views
1

Я использую аргонавт для анализа json для классов case.Как преобразовать значение json «aaa, bbb» в «Seq [String]» с аргонавтом?

Json:

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

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

Как это исправить, так что я могу разобрать [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 предназначен для удобного использования с конструкторами и экстракторами класса case, но он намного более гибкий, чем просто.

 Смежные вопросы

  • Нет связанных вопросов^_^