【问题标题】:Check if value of one property is present in value of another property in JSON Schema validation?在 JSON Schema 验证中检查一个属性的值是否存在于另一个属性的值中?
【发布时间】:2022-11-12 08:51:44
【问题描述】:
{
"name": "abc",
"email" : "abc@gmail.com"
}
我可以使用以下条件使用 json 模式验证来验证此 json 吗:
- name 和 email 都是字符串
- 电子邮件应包含名称属性的值,如在给定的示例中,如果电子邮件是“xyz@gmail.com”,则 json 将无效,但由于包含“abc”,因此它是有效的。
【问题讨论】:
标签:
json
validation
schema
jsonschema
json-schema-validator
【解决方案1】:
在 jsonschema 中,不可能从要验证的数据中引用任意动态值并将其用作模式验证的一部分。有关推理的更多上下文,请参阅this discussion。然而:
如果您可以枚举属性的所有值,则可以使用oneOf 和const 为每个值应用特定的约束。从您的示例来看,这看起来对您没有用。
如果不能枚举所有值,则不能使用标准 jsonschema。一些验证器库实现非标可以帮助您的功能。例如,Avj implements a $data keyword 可以解决您的问题。但请记住,此解决方案与 Avj 相关 - 其他验证器将忽略此关键字。