Reputation: 4709
Below is an extract from my JSON schema.
I want to specify that both algorithm
and results
are required.
Additionally I want to specify:
algorithm
is algorithm1
, then results must be one of results1
, results2
, or results3
.algorithm
is algorithm2
, then results must be one of results2
, results3
, or results4
.Is this possible?
"algorithm": {
"description": "description...",
"type": "string",
"enum": [
"",
"algorithm1",
"algorithm2"
]
},
"results": {
"description": "description...",
"type": "string",
"enum": [
"",
"results1",
"results2",
"results3",
"results4"
]
},
"required": ["algorithm", "results"]
Upvotes: 0
Views: 273
Reputation: 4709
Thanks to the reference above from @jruizaranguren, I was able to figure it out.
"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" }
]
}
}
}
Upvotes: 1