arraysjsonenumsjsonschema

Correct way to define array of enums in JSON schema


I want to describe with JSON schema array, which should consist of zero or more predefined values. To make it simple, let's have these possible values: one, two and three.

Correct arrays (should pass validation):

[]
["one", "one"]
["one", "three"]

Incorrect:

["four"]

Now, I know the "enum" property should be used, but I can't find relevant information where to put it.

Option A (under "items"):

{
    "type": "array",
    "items": {
        "type": "string",
        "enum": ["one", "two", "three"]
    }
}

Option B:

{
    "type": "array",
    "items": {
        "type": "string"
    },
    "enum": ["one", "two", "three"]
}

Solution

  • Option A is correct and satisfy your requirements.

    {
        "type": "array",
        "items": {
            "type": "string",
            "enum": ["one", "two", "three"]
        }
    }
    

    Update 2023-11-08: type can be omitted. According to last json-schema specifications,

    The enum keyword is used to restrict a value to a fixed set of values. It must be an array with at least one element, where each element is unique.

    and

    You can use enum even without a type, to accept values of different types.`