JSON 架构 - 如何指定所需属性的排列
JSON schema - how to specify permutations of required properties
以下是我的 JSON 架构的摘录。
我想指定 algorithm
和 results
都是必需的。
另外我想说明:
- 当
algorithm
为 algorithm1
时,结果必须为 results1
、results2
或 results3
. 之一
- 当
algorithm
为 algorithm2
时,结果必须为 results2
、results3
或 results4
. 之一
这可能吗?
"algorithm": {
"description": "description...",
"type": "string",
"enum": [
"",
"algorithm1",
"algorithm2"
]
},
"results": {
"description": "description...",
"type": "string",
"enum": [
"",
"results1",
"results2",
"results3",
"results4"
]
},
"required": ["algorithm", "results"]
感谢上面来自@jruizaranguren 的参考,我能够弄明白。
"required": ["results"],
"results": {
"type": "object",
"oneOf": [
{ "$ref": "#/definitions/Results1" },
{ "$ref": "#/definitions/Results2" }
]
},
"definitions": {
"Results1": {
"type": "object",
"required": ["algorithm", "results"],
"properties": {
"algorithm": {
"type": "string",
"enum": [ "algorithm1" ]
},
"results": {
"type": "string",
"allOf": [
{ "result": "results1" },
{ "result": "results2" },
{ "result": "results3" }
]
}
}
},
"Results2": {
"type": "object",
"required": ["algorithm", "results"],
"properties": {
"algorithm": {
"type": "string",
"enum": [ "algorithm2" ]
},
"results": {
"type": "string",
"allOf": [
{ "result": "results2" },
{ "result": "results3" },
{ "result": "results4" }
]
}
}
}
以下是我的 JSON 架构的摘录。
我想指定 algorithm
和 results
都是必需的。
另外我想说明:
- 当
algorithm
为algorithm1
时,结果必须为results1
、results2
或results3
. 之一
- 当
algorithm
为algorithm2
时,结果必须为results2
、results3
或results4
. 之一
这可能吗?
"algorithm": {
"description": "description...",
"type": "string",
"enum": [
"",
"algorithm1",
"algorithm2"
]
},
"results": {
"description": "description...",
"type": "string",
"enum": [
"",
"results1",
"results2",
"results3",
"results4"
]
},
"required": ["algorithm", "results"]
感谢上面来自@jruizaranguren 的参考,我能够弄明白。
"required": ["results"],
"results": {
"type": "object",
"oneOf": [
{ "$ref": "#/definitions/Results1" },
{ "$ref": "#/definitions/Results2" }
]
},
"definitions": {
"Results1": {
"type": "object",
"required": ["algorithm", "results"],
"properties": {
"algorithm": {
"type": "string",
"enum": [ "algorithm1" ]
},
"results": {
"type": "string",
"allOf": [
{ "result": "results1" },
{ "result": "results2" },
{ "result": "results3" }
]
}
}
},
"Results2": {
"type": "object",
"required": ["algorithm", "results"],
"properties": {
"algorithm": {
"type": "string",
"enum": [ "algorithm2" ]
},
"results": {
"type": "string",
"allOf": [
{ "result": "results2" },
{ "result": "results3" },
{ "result": "results4" }
]
}
}
}