26
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JSON Schemaで少し凝ったvalidationをするための定義方法

Posted at

経緯

cloud functionsでAPI作るにあたって入力をjsonで受け取るようにしたが、validationどうしようと調べてたらJSON Schemaという素敵なものと出会った。

単純に必須項目や文字列、数値などのスキーマ定義するだけならそれほど悩まず書けるが、radioボタンの入力項目などもう少し制限かけたいなーという欲が出たので調べて見た。

前提

JSON Schemaはdraft-06で動作確認しています。

JSON Schema | The home of JSON Schema

NULLを許容したい

typeを配列にしてnullを許容するように記載すればOK。

nullable.json
    "nullable": {
      "type": [
        "string",
        "null"
      ]
    }

特定の項目の中から選択されているか確認したい

radioボタンなど入力項目が特定の内容に決まっている場合にはenumを使えばOK。

enum.json
    "selected": {
      "type": "string",
      "enum": [
        "dog",
        "cat",
        "monkey"
      ]
    }

複数選択可の場合は以下のように書ける。

enum2.json
    "multiselected": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "dog",
          "cat",
          "monkey"
        ]
      }
    }

複数選択可だが最低1つ選択させたい

複数選択可のselect boxなどで未設定はNGという場合にはminItemsを指定すればOK。

enum3.json
    "requiredselected": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string",
        "enum": [
          "dog",
          "cat",
          "monkey"
        ]
      }
    }

URLやEMAILなど特定のフォーマットの文字列か確認したい

formatを指定すればOK。指定できるフォーマットはこちらを確認ください。

url.json
    "url": {
      "type": "string",
      "format": "uri"
    }

ちょうどいいformatがない場合は正規表現が使えるpatternを使うこともできます。(\dが使えないなど少々使いづらいが)

数値が範囲内か確認したい

minimumとmaximumを指定すればOK。

range.json
    "range": {
      "type": "number",
      "minimum": 0,
      "maximum": 100
    }

最小値、最大値を含めたくない場合はexclusiveMinimum(Maximum)をFalseにすればOK。

特定の数値の倍数が設定されているか確認したい

multipleOfを指定すればOK。

price.json
    "price": {
      "type": "number",
      "multipleOf": 100
    }

ただ、multipleOfに0.1などの少数を指定すると精度の関係でvalidationの結果が予期しない結果になりかねないので、少数は基本使わない。

26
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?