我正在尝试为传入的JSON构建一个简单的验证器。
我想检查JsObject只有一个字段“name”,这是一个非空字符串。
import play.api.libs.json.Reads._
import play.api.libs.json._
val myRead = ( __ \ "name" ).json.pickBranch[JsString](minLength(1))
我希望 myRead 是一个Reads [JsObject]或类似的东西,但我得到的却是编译错误:
为play.api.libs.json.Reads [M]类型分散隐式扩展 从特征DefaultReads
中的方法ArrayReads开始
如何摆脱这个问题?
答案 0 :(得分:0)
好的,结果是 minLength 根本不适用于JsString。
结束以下解决方案:
private def myPattern(regex: => Regex, error: String = "error.pattern")(implicit reads:Reads[JsString]) =
Reads[JsString]( js => reads.reads(js).flatMap { o =>
regex.unapplySeq(o.as[String]).map( _ => JsSuccess(o) ).getOrElse(JsError(error))
})
val myRead = (__ \ "name" ).json.pickBranch[JsString](myPattern(new Regex(".+"))
完美无缺,虽然我在这里错过了一些“标准”验证。