PlayJSon映射中的转换值

问题描述 投票:0回答:1

我正在使用PlayJson执行JSON到案例类的标准映射。如果验证成功,我想转换映射到成员Test.foo的值。是否可以将其用于Reads转换器的定义?

val json = .....

case class Test(foo:String, bar:String)

val readsTest: Reads[Test] = (
  (__ \ "foo").read[String](minLength(5)) and // And I want to transform this value if the validation succeeds
  (__ \ "bar").read[String](minLength(10))
)(Test.apply _)


json.validate[Test] match {
  case s: JsSuccess[Test] => s.get
  case e: JsError => false
}
scala playframework play-json
1个回答
0
投票

Reads.map可以做到这一点,例如,我们要反转Reads.map字段的值,那么我们可以像这样调用foo上的.map(v => v.reverse)

Reads

这是一个可行的示例

(__ \ "foo").read[String](minLength[String](5)).map(v => v.reverse)

输出

val json =
  """
    |{
    |  "foo": "abcdefghijkl",
    |  "bar": "012345678910"
    |}
    |""".stripMargin

case class Test(foo: String, bar: String)

val readsTest: Reads[Test] = (
  (__ \ "foo").read[String](minLength[String](5)).map(v => v.reverse)
  (__ \ "bar").read[String](minLength[String](10))
)(Test.apply _)

Json.parse(json).validate[Test](readsTest)
© www.soinside.com 2019 - 2024. All rights reserved.