我有一个JSON请求,我试图根据JSON模式进行验证。我想知道是否可以要求一个子schema中的字段以同一个子schema中的字段的值为基础?我试过anyOf,OneOf和IF,Then,Else都没有用。anyOf返回错误 "2个子schema中只有1个匹配",OneOf返回 "2个子schema匹配而不是1个"。
{
"field1":"aaa",
"field2":"bbb"
"field3":{
"isTrue":true,
"inner1":"1",
"inner2":"1"
}
}
所以,对于上面的Json,如果字段isTrue为真,我可以只要求字段inner1和inner2吗?
"field3": {
"type": "object",
"properties": {
"isTrue": {
"type":
"boolean"
},
"inner1": {
"type":
"integer"
},
"inner2": {
"type":
"string"
}
},
"anyOf": [
{
"properties": {
"isTrue": {
"const": "true"
}
},
"required": [
"inner1",
"inner2"
]
},
{
"properties": {
"isTrue": {
"const": "false"
}
},
"required": [
"isTrue"
]
}
]
}
以上是我的违规Json模式。
你的模式应该工作,如果你删除周围的引号。"true"
和 "false"
-- 它们被视为字符串,而不是布尔值。
(另外,你的数据在inner1和inner2中都使用了字符串,但模式希望第一个字符串是一个整数--可能是转录错误。)