配列の設定

type:arrayとすることで何らかの構造の配列を期待するという意味になります。そして、何らかのと書いたように中身をある程度絞り込むようなオプションがいくつかあります。

構成アイテムの型を設定

items:<定義>プロパティで設定できます。例えば以下のような書き方で「数値の配列」という意味にできます。

{
  "type": "array",
  "items": {
    "type": "number"
  }
}

いくつかの型が混じっている

例えばnumberfalseが混ざったものを期待したい場合はanyOfというものを使います。これは「どれかに当てはまってればいいよ」というような構造にすることができるオプションです。

{
  "type": "array",
  "items": {
    "anyOf": [
      {
        "type": "number",
      },
      {
        "type": "boolean",
        "enum": [false]
      }
    ]
  }
}

タプル

itemsの中を配列にすることでタプルにできます。

{
  "type": "array",
  "items": [
    {
      "type": "string"
    },
    {
      "type": "number"
    }
  ]
}

これは以下のようなものを期待します。

[
  "foo",
  123,
  false,
  null
]

見て分かる通り先頭が期待した通りならあとは何でもいいという感じになってます。もし、期待した通りのタプルにしたいならadditionalItems:falseを一緒に置きます。

{
  "type": "array",
  "items": [
    {
      "type": "string"
    },
    {
      "type": "number"
    }
  ],
  "additionalItems": false
}
[
  "foo",
  123
]

ちなみにadditionalItemsに文字列などを設定すると、定義以降の部分の型をそれに絞ることができます。

{
  "type": "array",
  "items": [
    {
      "type": "string"
    },
    {
      "type": "number"
    }
  ],
  "additionalItems": {
    "type": "string"
  }
}
[
  "foo",
  123,
  "bar",
  "baz"
]

ユニークな値

重複した値は欲しくない時があるかもしれません。そんな時はuniquness:trueを共に置きます。

{
  "type": "array",
  "uniquness": true
}

これで以下のような定義は駄目になります。

[
  "foo",
  "foo"
]

配列のサイズ

minItemsmaxItemsを使います。それぞれ、最小の配列サイズと最大の配列サイズを設定できます。

{
  "type": "array",
  "minItems": 2,
  "maxItems": 3
}