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}$"
}