在 IF 条件中引用内部属性 - JSON 模式
Referring inner properties in the IF condition - JSON Schema
以下是描述问题的示例架构
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"definitions": {
"person": {
"type": "object",
"properties": {
"age": {
"type": "string"
}
}
}
},
"properties": {
"child": {
"$ref": "#/definitions/person"
}
},
"required": [
"child"
],
"if": {
"properties": {
"person/age": {
"const": "3"
}
}
},
"then": {
"properties": {
"guardian": {
"$ref": "#/definitions/person"
}
},
"required": [
"guardian"
]
}
}
有没有办法在 person 对象中引用年龄?
{"child":{"age":"3"}}
。应该失败,因为缺少监护人标签
由于缺少监护对象,上述数据应该会失败。
请记住,if
只是针对实例验证的常规模式。就像使用任何嵌套对象结构一样嵌套 properties
。
{
"type": "object",
"properties": {
"child": {
"type": "object",
"properties": {
"age": { "const": "3" }
},
"required": ["age"]
}
},
"required": ["child"]
}
请注意,type
和 required
关键字是必要的,以免无意中触发 then
架构。例如,如果没有它们,这些会导致 then
在您可能不希望它触发时触发。
{}
{ "child": null }
{ "child": {} }
以下是描述问题的示例架构
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"definitions": {
"person": {
"type": "object",
"properties": {
"age": {
"type": "string"
}
}
}
},
"properties": {
"child": {
"$ref": "#/definitions/person"
}
},
"required": [
"child"
],
"if": {
"properties": {
"person/age": {
"const": "3"
}
}
},
"then": {
"properties": {
"guardian": {
"$ref": "#/definitions/person"
}
},
"required": [
"guardian"
]
}
}
有没有办法在 person 对象中引用年龄?
{"child":{"age":"3"}}
。应该失败,因为缺少监护人标签
由于缺少监护对象,上述数据应该会失败。
请记住,if
只是针对实例验证的常规模式。就像使用任何嵌套对象结构一样嵌套 properties
。
{
"type": "object",
"properties": {
"child": {
"type": "object",
"properties": {
"age": { "const": "3" }
},
"required": ["age"]
}
},
"required": ["child"]
}
请注意,type
和 required
关键字是必要的,以免无意中触发 then
架构。例如,如果没有它们,这些会导致 then
在您可能不希望它触发时触发。
{}
{ "child": null }
{ "child": {} }