I find it difficult to figure out how to check an array of objects based on the value of one of the properties. So where do I have a JSON object, for example:
{
"items": [
{
"name": "foo",
"otherProperty": "bar"
},
{
"name": "foo2",
"otherProperty2": "baz",
"otherProperty3": "baz2"
},
{
"name": "imInvalid"
}
]
}
I would like to say that
- elements can contain anyOf objects where the name can be "foo" or "foo2"
- if it is "foo", then the other valid other property (required) is "OtherProperty"
- if the name is "foo2", then the only other valid properties are "otherProperty2" and "otherProperty3", both required
- There is no other meaning for "name" than "foo" and "foo2".
- Objects themselves are optional in the items array, and some can be repeated.
, , . , "imInvalid" . . ?
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"required": ["items"],
"properties": {
"items": {
"type": "array",
"minItems": 1,
"additionalProperties": false,
"properties": {
"name": {
"anyOf": [
{
"type": "object",
"required": ["name", "otherProperty"],
"additionalProperties": false,
"properties": {
"otherProperty": { "type": "string" },
"name": { "enum": [ "foo" ] }
}
},{
"type": "object",
"required": ["name", "otherProperty2", "otherProperty3" ],
"additionalProperties": false,
"properties": {
"otherProperty2": { "type": "string" },
"otherProperty3": { "type": "string" },
"name": { "enum": [ "foo2" ] }
}
}
]
}
}
}
}
}