type:array
とすることで何らかの構造の配列を期待するという意味になります。そして、何らかのと書いたように中身をある程度絞り込むようなオプションがいくつかあります。
構成アイテムの型を設定
items:<定義>
プロパティで設定できます。例えば以下のような書き方で「数値の配列」という意味にできます。
{
"type": "array",
"items": {
"type": "number"
}
}
いくつかの型が混じっている
例えばnumber
とfalse
が混ざったものを期待したい場合は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"
]
配列のサイズ
minItems
やmaxItems
を使います。それぞれ、最小の配列サイズと最大の配列サイズを設定できます。
{
"type": "array",
"minItems": 2,
"maxItems": 3
}