能否在JSON Schema中引用待验证对象的fieldSpecific.minLength作为value的minLength?
能否在JSON Schema Draft-07中实现动态引用自身属性的校验?
在JSON Schema Draft-07的标准规范中,无法直接实现这种动态引用待验证对象自身fieldSpecific.minLength值来校验value字段最小长度的逻辑。
原因
Draft-07中的校验关键字(比如minLength)要求配置的值必须是静态常量,不支持动态引用待验证对象的其他属性值。Schema本身是静态的校验规则,标准规范里没有提供这种从待验证对象中动态取值作为校验参数的机制。
可行的替代方案
如果需要实现这类动态校验逻辑,可以借助支持$data扩展的JSON Schema校验库(比如Ajv)。$data是一个非标准但被广泛支持的扩展关键字,允许你引用待验证对象的属性值作为校验参数。
以下是使用$data扩展实现需求的Schema示例:
{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Text", "description": "Form Text", "type": "object", "properties": { "fieldSpecific": { "type": "object", "properties": { "minLength": { "type": "integer", "minimum": 0 } }, "required": ["minLength"] }, "value": { "type": "string", "default": "", "minLength": { "$data": "1/fieldSpecific/minLength" } } }, "required": ["fieldSpecific", "value"] }
这里的$data: "1/fieldSpecific/minLength"表示:从当前属性(value)的父级(整个待验证对象,用1表示)开始,查找fieldSpecific.minLength的值,将其作为minLength的校验参数。
需要注意的是,$data不属于Draft-07的标准规范,只有部分校验库支持该扩展,使用前需要确认你的校验工具是否兼容。
内容的提问来源于stack exchange,提问作者Rahul Gupta
相关产品推荐
相关产品推荐

