在Play框架中使用带有读取和写入功能的Argonaut

时间:2015-09-28 23:57:17

标签: json scala playframework argonaut

我知道如何使用play 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 => ...
        }
    }
}

我应该如何编写使用Argonaut而不是Play json的读取和写入代码?

2 个答案:

答案 0 :(得分:0)

在这方面,argonaut的docs相当全面。您需要使用

生成decodeValidation
Validation

然后使用val result2: Validation[String, Person] = Parse.decodeValidation[Person](json) 来获取{{1}}个对象。

{{1}}

答案 1 :(得分: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
  }

}

实际上,你需要一个使用argonaut而不是play json来解析请求体的body解析器。希望这会有所帮助。