{
"eventType": "memory_exceeded",
"event_time": 1544423819843,
"clientDetails": {},
"appDetails": {},
"DeviceDetails": {}
}
我正在尝试在上述json结构中提供具有以下条件的json模式。
1)有一个键“ eventType”,可以有1000多个值。
2)还有4个其他依赖属性以及event_type。
3)我想在其中编写模式定义
a)如果“ eventType”!= [“ x”,“ y”,“ z”],则包括所有这4个 依赖属性。
b)如果“ eventType” = [“ x”,“ y”,“ z”],则仅包含 “ DeviceDetails”作为依赖项。
我可以为此使用OneOf吗?我知道我们可以在3a中使用“ not”键进行否定检查。但是我无法参与其中。请帮助指针。
答案 0 :(得分:1)
如果通过“然后包括所有4个从属属性” 的意思是使它们成为必需的属性,那么我可以想到这种基于草案07的解决方案:
如果eventType
设置为“ x”,“ y”或“ z”,则仅DeviceDetails是必需的。否则,其他一切都是。 (我会让您自己替换这些占位符值:)
我冒昧地将minProperties: 1
设置为DeviceDetails
,appDetails
和ClientDetails
,因为我认为您更喜欢使用非空对象。如果不需要,您可以安全地从架构中删除它。
{
"properties": {
"eventType": {
"type": "string"
},
"event_time": {
"type": "integer"
},
"ClientDetails": {
"type": "object",
"minProperties": 1
},
"appDetails": {
"type": "object",
"minProperties": 1
},
"DeviceDetails": {
"type": "object",
"minProperties": 1
}
},
"if": {
"properties": {
"eventType": {
"enum": [
"x",
"y",
"z"
]
}
}
},
"then": {
"required": [
"DeviceDetails"
]
},
"else": {
"required": [
"event_time",
"ClientDetails",
"appDetails",
"DeviceDetails"
]
}
}