В схеме JSON я пытаюсь выполнить условную проверку на основе значения во вложенном объекте.Моя схема и образец JSON приведены ниже.На простом английском языке мое правило будет таким: «если bar.sub2 равен 'cat', то требуется baz".
Мой образец JSON проходит проверку и должен потерпеть неудачу, потому что baz не работает.Я достаточно уверен, что условная логика верна и что указатель на bar.sub2 неверен.Но я не могу понять синтаксис и структуру того, как сделать это правильно.
Пример JSON
{"foo": "someValue"
,"bar": {"sub1":"someValue", "sub2": "cat"}
}
Схема:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"foo": { "type": "string"}
,"bar" : {
"type": "object"
,"properties": {
"sub1": { "type": "string"}
,"sub2": { "type": "string"}
},
"required" :["sub1","sub2"]
}
,"baz":{"type": "string"}
},
"oneOf":[
{"properties": {"not": {"/bar/sub2": { "enum": ["cat"]}}}}
,{"required" : ["baz"]}
],
"required": ["foo","bar"],
"definitions":{}
}
РЕДАКТИРОВАТЬ: нашел свой собственный ответ здесь
Правильная схема:
"oneOf":[
{"not" : {"$ref": "#/definitions/sub2IsCat"}}
,{"required" : ["baz"]}
],
"definitions":{
"sub2IsCat" :{
"properties":{
"bar": {
"properties":{
"sub2" :{ "enum": ["cat"] }}}}}
}