msgId1
必须a1
和msgId2
必须a2
。
这应该是有效的:
{ "msgId1": { "a1": "b1" } }
这也是:
{ "msgId2": { "a2": "b2" } }
而且:
{ "msgIdUnknownYet": { "a3": "b3" } }
那是无效的:
{
"msgId1": { "a1": "b1" },
"msgId2": { "a2": "b2" }
}
那也应该是无效的:
{
"msgId1": { "abc": "b1" },
"msgId2": { "a2": "b2" }
}
如果我使用oneOf
,则不允许使用未知消息。如果至少有一个右msgId1
存在,它还允许添加错误的msgId2
或msgId
。如何为其编写架构?
答案 0 :(得分:0)
您可以使用dependencies
。
{
"type": "object",
"properties": {
"msgId1": { "required": ["a1"] },
"msgId2": { "required": ["a2"] }
},
"dependencies": {
"msgId1": { "not": { "required": ["msgId2"] } }
}
}
这有效地说明了如果" msgId1"存在,那么" msgId2"不能出席。这样,如果没有" msgId1"它仍然会通过。或" msgId2"在场。
答案 1 :(得分:0)
如果有办法隔离它们并限制属性总数,则可以使用。这告诉:如果有一个具有此类名称的属性,则它必须具有该特定表单,并且属性总数不超过1.
{
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {
"header": {
"type": "object",
"properties": {
"id": { "type": "integer" }
},
"required": ["id"]
},
"messageHeader": {
"type": "object",
"properties": {
"token": { "type": "string" }
},
"required": ["token"]
},
"msgId1": {
"type": "object",
"properties": { "a1": { "type": "string" } },
"required": ["a1"]
},
"msgId2": {
"type": "object",
"properties": { "a2": { "type": "string" } },
"required": ["a2"]
}
},
"type": "object",
"dependencies": {
"msgId1": { "type": "object", "properties": { "msgId1": { "$ref": "#/definitions/msgId1" } } },
"msgId2": { "type": "object", "properties": { "msgId2": { "$ref": "#/definitions/msgId2" } } }
},
"maxProperties": 1
}