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
}