複雑な型というのは
複数の条件すべてにマッチしなければならない
どれかにマッチすればいい(ホワイトリスト)
複数の条件のうち1つにマッチしなければならない
マッチしてはならない(ブラックリスト)
などがあります。
複数の条件すべてにマッチしなければならない
これにはallOf
を使います。
{
"allOf": [
{
"type": "string"
},
{
"pattern": "\w+"
}
]
}
別れているので少しややこしいですが、以下のようにするのと同じ意味です。
{
"type": "string",
"pattern": "\w+"
}
主に#ref
な条件を組み合わせる為に使ったりします。
どれかにマッチすればいい(ホワイトリスト)
これにはanyOf
を使います。「ここではstring
かnumber
を置いてほしい」という要望なら、以下のようになります。
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
複数の条件のうち1つにマッチしなければならない
これにはoneOf
を使います。例えば以下のようなスキーマだったとします。
{
"oneOf": [
{
"type": "string"
"pattern": "^a"
},
{
"type": "string"
"pattern": "z$"
}
]
}
ここにはaa
やzz
は置くことができますが、az
は両方にマッチしてしまうので置くことができません。
マッチしてはならない(ブラックリスト)
これにはnot
を使います。例えば以下のようにすると「boolean
とobject
、array
, null
以外を期待する(string
かnumber
)」という意味になります。
{
"not": [
{
"type": "boolean"
},
{
"type": "object"
},
{
"type": "array"
},
{
"type": "null"
},
]
}