type
にstring
を指定したものは、文字列のプロパティ値を期待する事になります。ただ文字列という情報だけでは範囲が広すぎる場合、それを狭める為のオプションもいくつか用意されています。
デフォルト値
default
を使うと初期値を設定できます。
{
"type": "string",
"default": "foo"
}
特定のワードに限定
これは別にstring
だけのオプションではないですが、enum
オプションがあります。type:string
の場合、これは文字列の配列を指定できます。以下に例を置きます。
{
"type": "string",
"enum": [
"foo",
"bar",
"baz"
]
}
この設定で上のプロパティはfoo
かbar
, baz
のどれかを置いてほしいという意味になります。
ここでexamples
というオプションも似たような動作になります。ただし、enum
は「必ずどれかを置く」というのを期待しますがexamples
の場合は、単に「例えばこういうのが置けますよ」と提示するだけです。
{
"type": "string",
"examples": [
"foo",
"bar",
"baz"
]
}
文字列の長さの制限
minLength
とmaxLength
オプションが用意されています。どちらも設定するのは数値で、minLength
の数値以上maxLength
の数値以下の文字列に絞り込むことができます。
{
"type": "string",
"minLength": 2,
"maxLength": 5
}
この設定はabc
は正しい、abcdef
は間違いだと判断されます。
文字列のパターンで制限
例えば URL を期待している箇所に適当な文字列を置かれても困るので、 URL のパターンを設定することでそれにマッチしない場合は誤りであることを伝えることができます。これにはpattern
オプションが用意されています。pattern
内では\w
などの\
は\\
とエスケープする必要があります。
いくつか一派的なパターンはformat
で定義できます。これにはemail
やuri
などがあります。
またpattern
とformat
は組み合わせて使えます。format
は若干甘いパターンなので、format
が用意されているものは積極的に使い、pattern
で強固にするのが良いと思います。
以下にいくつか絞る例を上げてみます。
{
"type": "string",
"format": "email"
}
example
は駄目でexample@email.com
は通ります。もしgmail.com
だけに絞りたい場合は以下のようになります。
{
"type": "string",
"format": "email",
"pattern": ".*@gmail.com"
}
URI
https://
のようなプロトコルが部分が含まれていれば大丈夫な場合"format": "uri"
が用意されてます。
{
"type": "string",
"format": "uri"
}
これだとプロトコル名の部分が何でも通るのでpattern
と組み合わせてhttps
かwss
かと絞ることができます。
{
"description": "url",
"type": "string",
"format": "url",
"pattern": "^(https|wss)://"
}
パス部分のパターンを厳しくしたりも可能です。
{
"type": "string",
"format": "url"
"pattern": "^(http(s)?://)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$"
}
DateTime
IOS8601(RFC3339) 形式(2020-04-21T04:01:43.730077309Z
や2020-04-21T04:01:43.730077309+09:00
のような文字列)で絞れます。
{
"type": "string",
"format": "date-time"
}
同じような感じでdate
とtime
というformat
もあり、これらはそれぞれT
の前、T
の後だけになったものです。
Color
残念ながら色にはformat
が用意されてません。ただ以下のようにすることで#fff
や#000000
のような文字列に絞ることはできます。
{
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}){1,2}$"
}