type:object
を置くとオブジェクトを期待するという意味になります。期待するプロパティやその値を絞り込むオプションがいくつかあります。
特定のプロパティ時の期待値の設定
properties
を置き、その中でそれぞれのプロパティ名とその名前の時のスキーマを設定できます。
{
"type": "object",
"properties": {
"foo": {
"type": "string"
},
"bar": {
"type": "number"
},
}
}
これは以下のような意味になります。
まず、オブジェクトです
そのオブジェクトが
foo
を持つならそれは文字列ですそのオブジェクトが
bar
を持つならそれは文字列ですそのオブジェクトが
baz
を持つならそれは型は何でもいいです
なので以下は通ります。
{
"foo": "foo",
"baz": false
}
厳密なプロパティ
additionalProperties:false
をproperties
と共に置くことで、完全にproperites
のプロパティ構造以外のプロパティは禁止されるようになります。つまり、先程は設定できたbaz
は駄目になるという事です。
{
"type": "object",
"properties": {
"foo": {
"type": "string"
},
"bar": {
"type": "number"
},
},
"additionalProperties": false
}
やや厳しく
additionalProperties:<設定>
でproperties
に置いていないプロパティの期待する型を絞ることができます。例えば以下はfoo
プロパティ以外の値はnumber
を期待するスキーマの例です。
{
"type": "object",
"properties": {
"foo": {
"type": "string"
},
},
"additionalProperties": {
"type": "number"
}
}
絶対定義してほしいプロパティ
reuiqred:<properties>
をproperties
と共に置くとここで羅列したプロパティ名は必須項目という意味になります。例えば以下は「foo
は絶対に定義してね」という意味になります。
{
"type": "object",
"properties": {
"foo": {
"type": "string"
},
"bar": {
"type": "number"
},
},
"required": [
"foo"
]
}
依存関係のプロパティ
先程から何度か「reuiqred:<properties>
をproperties
と共に置くと...」のように言っていますが、このように「required
はproperties
が存在するなら設定できる」ような関係を設定できるオプションがあります。
これはdependencies
を置きます。これはこのプロパティは: [これらのプロパティに依存する]
というような感じで置きます。
例えば以下はbar
を置くなら必ずfoo
を定義しなければならないというスキーマの例です。
{
"type": "object",
"properties": {
"foo": {
"type": "string"
},
"bar": {
"type": "number"
},
},
"dependencies": {
"bar": ["foo"]
}
}
プロパティ名のパターン
propertyNames: {pattern:<pattern>}
を置くとプロパティ名はそのパターンにマッチするものだけ期待するという意味にできます。以下はcolor.orange
やcolor.blue
などcolor.
からはじまるプロパティだけを期待する例です。
{
"type": "object",
"propertyNames": {
"pattern": "^color\\."
}
}
プロパティの数
minProperties:<number>
やmaxProperties:<number>
を置くことでそれぞれ、「これ以上はプロパティ数を置いてほしい」、「これ以下にプロパティ数を抑えてほしい」という意味にできます。
{
"type": "object",
"minProperties": 2,
"maxProperties": 3
}