複雑な型というのは
複数の条件すべてにマッチしなければならない
どれかにマッチすればいい(ホワイトリスト)
複数の条件のうち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"
},
]
}