仅通过Play Json进行验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅通过Play Json进行验证相关的知识,希望对你有一定的参考价值。

我想使用PlayJson仅验证某些json的多个字段,而不将其映射到自定义对象。我只关心验证标准的是或否答案。这样可以使用PlayJson吗?到目前为止,我有类似的东西,

val json = .....

val reads = (JsPath  "foo").read[String](min(5)) and
      (JsPath  "bar").read[String](max(10))

json.validate["I ONLY WANT TO VALIDATE NOT MAP"](reads) match {
  case s: JsSuccess => true
  case e: JsError => false
}

感谢您的Stack Overflow社区。

答案

代替通过Reads[MyModel]反序列化为案例类模型,我们可以像这样通过Reads[(String, String)]反序列化为元组

import play.api.libs.json._
import play.api.libs.json.Reads._
import play.api.libs.functional.syntax._

val reads = (
  (JsPath  "foo").read[String](minLength[String](5)) and
  (JsPath  "bar").read[String](minLength[String](10))
).tupled

val json = Json.parse(
  """
    |{
    |  "foo": "abcde",
    |  "bar": "woohoowoohoo",
    |  "zar": 42
    |}
    |""".stripMargin)

json.validate(reads).isSuccess

输出

res0: Boolean = true

请注意在创建读取器时如何调用tupled方法,并在验证过程中使用isSuccess来获取布尔值。

https://scalafiddle.io/sf/JBjdt2Y/0

以上是关于仅通过Play Json进行验证的主要内容,如果未能解决你的问题,请参考以下文章