{
"type": "object",
"properties": {
"FileType": { "type": "string" },
"Version": { "type": "string" },
"Expt":
{
"type": "object",
"properties":
{
"design": { "type": "string","enum": ["TS", "DR", "BC", "DP"] }
},
"required": ["design"],
"additionalProperties": false
},
"Rout":
{
"type": "object",
"properties":
{
"timeUnits": {"type": "string", "enum": ["sec", "min", "hr"] },
"setTime": { "type": "number", "minimum": 0.0, "maximum": 50 }
},
"required": ["timeUnits"],
"additionalProperties": false
}
}
}
design
== DR
或 BC
那么 Rout
->setTime
应该存在design
== TS
或 DP
,则 setTime
不应该存在setTime
不允许
{
"Expt": { "design": "TS" },
"Rout": { "timeUnits": "sec", "setTime":12 }
}
setTime
应该是required
{
"Expt": { "design": "BC"},
"Rout": { "timeUnits": "sec" }
}
{
"Expt": { "design": "TS" },
"Rout": { "timeUnits": "sec" }
}
{
"Expt": { "design": "BC" },
"Rout": { "timeUnits": "sec", "setTime":12 }
}
我在模式中尝试了 if-then-else、oneof、allof 的多种组合,但无法验证
setTime
是否为 BC
或 DR
。我预计 setTime
会出现错误,其值为 TS
或 DP
这可以通过您指出的多种方式完成,这里我们有一个示例
oneOf
每个子模式几乎都是重复的,但我们使用
enum
来创建模式之间的差异。
Rout
已移至 $defs
以便重用,然后定义 setTime
,并且 required
、unevaluatedProperties
会阻止第一个 Rout
模式的 oneOf
模式中的任何其他属性。
unevaluatedProperties
限制在第二个模式中使用 setTime
。
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"required": [
"Expt",
"Rout"
],
"properties": {
"FileType": {
"type": "string"
},
"Version": {
"type": "string"
},
"Expt": {
"type": "object",
"properties": {
"design": {
"type": "string",
"enum": [
"DR",
"BC"
]
}
},
"required": [
"design"
],
"additionalProperties": false
},
"Rout": {
"$ref": "#/$defs/Rout",
"required": [
"setTime"
],
"properties": {
"setTime": {
"type": "number",
"minimum": 0,
"maximum": 50
}
},
"unevaluatedProperties": false
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"Expt",
"Rout"
],
"properties": {
"FileType": {
"type": "string"
},
"Version": {
"type": "string"
},
"Expt": {
"type": "object",
"properties": {
"design": {
"type": "string",
"enum": [
"TS",
"DP"
]
}
},
"required": [
"design"
],
"additionalProperties": false
},
"Rout": {
"$ref": "#/$defs/Rout",
"unevaluatedProperties": false
}
}
}
],
"$defs": {
"Rout": {
"type": "object",
"properties": {
"timeUnits": {
"type": "string",
"enum": [
"sec",
"min",
"hr"
]
}
},
"required": [
"timeUnits"
]
}
}
}