【发布时间】:2015-12-16 21:15:22
【问题描述】:
鉴于以下 JSON...
{
"nickname": "mj",
"firstname": "Mike",
"lastName": "Jordan",
"trash": "ignore"
}
...我需要对其进行解析和验证,以便
- 除
nickname、firstName和lastName之外的任何字段都被过滤掉——在我上面的示例中,trash必须被删除 - 如果已定义,
nickname(可选)必须至少为 3 个字符长
下面是我的代码:
import play.api.libs.json._
import play.api.libs.functional.syntax._
def orEmpty = reads | __.json.put(Json.obj())
val js = Json.parse("""{ "nickname": "mj", "firstname": "Mike", "lastName": "Jordan" }""")
val validateUser = (
((__ \ 'nickname).json.pickBranch(Reads.of[JsString] <~ Reads.minLength[String](3)) orEmpty) ~
((__ \ 'firstName).json.pickBranch) ~
((__ \ 'lastName).json.pickBranch)
)
validateUser.reads(js).fold(
valid = { validated => JsSuccess(js) },
invalid => { errors => JsError(errors) }
)
问题是,如果nickname因为少于3个字符而无效,则orEmpty适用且不报错。我需要保持nickname 可选(这就是我定义orEmpty 的原因),但是当且仅当nickanme 通过Reads.minLength 检查时,验证才会成功。
【问题讨论】:
标签: json scala playframework