複雑な型の設定

複雑な型というのは

  • 複数の条件すべてにマッチしなければならない
  • どれかにマッチすればいい(ホワイトリスト)
  • 複数の条件のうち1つにマッチしなければならない
  • マッチしてはならない(ブラックリスト)

などがあります。

複数の条件すべてにマッチしなければならない

これにはallOfを使います。

{
  "allOf": [
    {
      "type": "string"
    },
    {
      "pattern": "\w+"
    }
  ]
}

別れているので少しややこしいですが、以下のようにするのと同じ意味です。

{
  "type": "string",
  "pattern": "\w+"
}

主に#refな条件を組み合わせる為に使ったりします。

どれかにマッチすればいい(ホワイトリスト)

これにはanyOfを使います。「ここではstringnumberを置いてほしい」という要望なら、以下のようになります。

{
  "anyOf": [
    {
      "type": "string"
    },
    {
      "type": "number"
    }
  ]
}

複数の条件のうち1つにマッチしなければならない

これにはoneOfを使います。例えば以下のようなスキーマだったとします。

{
  "oneOf": [
    {
      "type": "string"
      "pattern": "^a"
    },
    {
      "type": "string"
      "pattern": "z$"
    }
  ]
}

ここにはaazzは置くことができますが、azは両方にマッチしてしまうので置くことができません。

マッチしてはならない(ブラックリスト)

これにはnotを使います。例えば以下のようにすると「booleanobjectarray, null以外を期待する(stringnumber)」という意味になります。

{
  "not": [
    {
      "type": "boolean"
    },
    {
      "type": "object"
    },
    {
      "type": "array"
    },
    {
      "type": "null"
    },
  ]
}