2015-09-28 1 views
0

Я знаю, как делать json-парсинг с помощью библиотеки воспроизведения json для воспроизведения. Например, у меня есть следующий код:Использование аргонавт в игровой среде с чтением и написанием

class PersonController extends Controller { 
    case class Person(age: Int, name: String) 
    implicit val personReads = Json.reads[Person] 
    implicit val personWrites = Json.writes[Person] 

    def create = Action(parse.json) { implicit request => 
     rs.body.validate[Person] match { 
      case s: JsSuccess => ... 
      case e: JsError => ... 
     } 
    } 
} 

Как я должен писать код, как чтение и запись с помощью Аргонавт вместо воспроизведения JSON?

ответ

0

Для аргонавта docs достаточно всеобъемлющим в этом отношении. Вы должны генерировать Codec с

implicit def PersonCodecJson: CodecJson[Person] = 
    casecodec2(Person.apply, Person.unapply)("age", "name") 

И затем использовать decodeValidation, чтобы получить Validation объект обратно.

val result2: Validation[String, Person] = 
    Parse.decodeValidation[Person](json) 
+0

Вы не получили мой вопрос. Я хочу написать код для подтверждения типа записи и чтения. На самом деле я не спрашиваю об утверждении. – ttt

+0

Не могли бы вы рассказать о том, что и что более важно * почему * вы пытаетесь сделать то, что вы есть? – tryx

0

Возможно, это что вы ищите?

class PersonController extends Controller { 

    case class Person(age: Int, name: String) 

    implicit val PersonCodecJson: CodecJson[Person] = 
    casecodec2(Person.apply, Person.unapply)("age", "name") 

    val argonautParser = new BodyParser[Person] { 
    override def apply(v1: RequestHeader): Iteratee[Array[Byte], Either[Result, Person]] = 
    } 

    def argonautParser[T]()(implicit decodeJson: DecodeJson[T]) = parse.text map { body => 
    Parse.decodeOption[T](body) 
    } 

    def create = Action(argonautParser) { implicit request => 
    Ok(request.body.name) //request.body is the decoded value of type Person 
    } 

} 

На самом деле вам нужен парсер, который анализирует тело запроса, используя аргонавт вместо игры json. Надеюсь это поможет.

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