Conditional subschemas
Keywords for applying conditional subschemas
Sometimes you need to conditionally apply a subschema or to negate the validation result. The following keywords help you do that.
Validation keywords
The following keywords are supported by any instance type, and are evaluated in the presented order. All keywords are optional.
not
An instance is valid against this keyword if is not valid against the schema defined by the value of this keyword. The value of this keyword must be a valid JSON schema (object or boolean).
{
"not": {
"type": "string"
}
}
| Input | Status |
|---|---|
-2.3 |
valid |
true |
valid |
null |
valid |
{"a": "test"} |
valid |
[1, 2, 3] |
valid |
"some string" |
invalid |
Please pay attention when using not!
You could unintentionally write schemas that never validate!
{
"type": "string",
"not": {
"type": "string"
}
}
if-then-else
This is a conditional structure containing three keywords: if, then and else.
Every keyword value must be a valid JSON schema (object or boolean).
If the if keyword is not present the then and else keywords are
ignored, but when the if keyword is present at least then or else
should also be present (both can be at the same time).
The instance is valid against this keyword in one of the following cases:
- the
ifkeyword validates the instance and thethenkeyword also validates it - the
ifkeyword doesn’t validate the instance but theelsekeyword validates it.
As a best practice, please place these keywords in the same order as defined here and do not add other keywords between them.
{
"if": {
"type": "string"
},
"then": {
"minLength": 3
},
"else": {
"const": 0
}
}
| Input | Status |
|---|---|
"abc" |
valid - string of length 3 |
"abcd" |
valid - string of length 4 |
0 |
valid |
0.0 |
valid |
"ab" |
invalid - string of length 2 |
1 |
invalid - not a string and not 0 |
["abc"] |
invalid - not a string and not 0 |
{
"if": {
"type": "string"
},
"then": {
"minLength": 3
}
}
| Input | Status |
|---|---|
"abc" |
valid - string of length 3 |
"abcd" |
valid - string of length 4 |
"ab" |
invalid - string of length 2 |
0 |
invalid - not a string |
["abc"] |
invalid - not a string |
{
"if": {
"type": "string"
},
"else": {
"const": 0
}
}
| Input | Status |
|---|---|
"abc" |
valid |
"" |
valid |
0 |
invalid |
-0.0 |
invalid |
1 |
invalid - not a string and not 0 |
["abc"] |
invalid - not a string and not 0 |