如何在JSON Schema校验中验证一个属性值存在于另一个属性值中?
用JSON Schema实现指定校验需求
完全可以用JSON Schema实现你要的校验规则,需要用到JSON Schema Draft 6及以上版本支持的$data关键字来引用实例中的其他属性值,结合正则表达式完成包含校验。
对应的JSON Schema示例
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "name": { "type": "string" }, "email": { "type": "string", "pattern": "^.*{{$data:1/name}}.*$" } }, "required": ["name", "email"] }
规则说明
name和email字段均被定义为字符串类型,满足第一个校验条件email的pattern规则通过$data:1/name引用同级的name属性值,生成的正则表达式会确保email字符串中包含name的内容,满足第二个校验条件required关键字强制要求name和email必须存在,避免缺失属性导致的校验漏洞
校验效果
- 你提供的示例JSON会校验通过
- 若
name为abc但email为xyz@gmail.com,正则匹配失败,校验不通过
注意:部分JSON Schema校验工具需要手动开启对$data关键字的支持,比如Ajv库需要在初始化时配置{ data: true }。
内容的提问来源于stack exchange,提问作者Utkarsh
相关产品推荐
相关产品推荐

