我希望数组 A 至少包含属性数组 B 的所有元素。
以下是一些示例:
// valid
{
"A": [1,2,3],
"B": [1,2]
}
// valid
{
"A": [1,2],
"B": [1,2]
}
// invalid
{
"A": [1,2],
"B": [1,2,3]
}
JSON Schema 草案没有具体要求
我找到了这个答案,它与我的需求类似:Is it possible in json schema to Define a Constraint Between Two Properties
我尝试使用:
{
...
"propertires": {
"A": {
"minContains": {"$data": "1/B"}
},
"B": {
...
}
}
}
结果:无效的测试用例也能通过
问题是 minContains 用于计算出现次数。尝试下面的架构。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["A", "B"],
"properties": {
"A": {
"type": "array",
"items": {
"type": "number"
}
},
"B": {
"type": "array",
"items": {
"type": "number"
}
}
},
"allOf": [
{
"$ref": "#/definitions/arrayContainment"
}
],
"definitions": {
"arrayContainment": {
"if": {
"properties": {
"B": {
"minItems": 1
}
}
},
"then": {
"allOf": [
{
"$comment": "For each item in B, it must exist in A",
"allOf": [
{
"$data": "/B/*/",
"propertyNames": {
"enum": { "$data": "/A" }
}
}
]
}
]
}
}
}
}
测试用例
// valid
{
"A": [1,2,3],
"B": [1,2]
}
// valid
{
"A": [1,2],
"B": [1,2]
}
// invalid
{
"A": [1,2],
"B": [1,2,3]
}