anyOf : Array<Schema>

anyOf

Array<Schema>

An instance validates successfully against this keyword if it validates successfully against at least one schema defined by this keyword’s value.

Value This keyword must be set to a non-empty array, where each item is a valid JSON Schema
Kind Applicator
Applies To Any
Base Dialect 2020-12
Changed In None
Introduced In Draft 4
Vocabulary Applicator
Specification https://json-schema.org/draft/2020-12/json-schema-core.html#section-10.2.1.2
Metaschema https://json-schema.org/draft/2020-12/meta/applicator
Official Tests draft2020-12/anyOf.json
Default None
Annotation None
Affected By None
Affects None
Also See

The anyOf keyword restricts instances to validate against at least one (but potentially multiple) of the given subschemas. This keyword represents a logical disjunction (OR) operation, as instances are valid if they satisfy the constraints of one or more subschemas (the union of the constraints).

This keyword is equivalent to the || operator found in most programming languages. For example:

bool valid = A || B || C;

As a reference, the following boolean truth table considers the evaluation result of this keyword given 3 subschemas: A, B, and C.

anyOf Subschema A Subschema B Subschema C
Invalid Invalid Invalid Invalid
Valid Invalid Invalid Valid
Valid Invalid Valid Invalid
Valid Invalid Valid Valid
Valid Valid Invalid Invalid
Valid Valid Invalid Valid
Valid Valid Valid Invalid
Valid Valid Valid Valid

Examples

A schema that constrains object instances to require at least one of the given properties Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "anyOf": [
    { "required": [ "foo" ] },
    { "required": [ "bar" ] }
  ]
}
Valid A value that only matches the first subschema is valid Instance
{ "foo": 1 }
Valid A value that only matches the second subschema is valid Instance
{ "bar": 2 }
Valid A value that matches every subschema is valid Instance
{ "foo": 1, "bar": 2 }
Invalid A value that does not match any of the subschemas is invalid Instance
{ "extra": 4 }
A schema that constrains instances with logical disjunctions that emit annotations Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "anyOf": [
    { "title": "Branch #1", "type": "number" },
    { "title": "Branch #2", "type": "string" },
    { "title": "Branch #3", "type": "integer" }
  ]
}
Valid A value that only matches the first subschema receives the first annotation Instance
3.14
Annotations
{ "keyword": "/anyOf/0/title", "instance": "", "value": [ "Branch #1" ] }
Valid A value that matches two subschemas receives both annotations Instance
12345
Annotations
{ "keyword": "/anyOf/0/title", "instance": "", "value": [ "Branch #1" ] }
{ "keyword": "/anyOf/2/title", "instance": "", "value": [ "Branch #3" ] }
Invalid A value that does not match any of the subschemas is invalid and receives no annotations Instance
{ "foo": 1 }