JSONスキーマがあります
{
'description': 'TPNode',
'type': 'object',
'id': 'tp_node',
'properties': {
'selector': {
'type': 'string',
'required': true
},
'attributes': {
'type': 'array',
'items': {
'name': 'string',
'value': 'string'
}
},
'children': {
'type': 'array',
'items': {
'type': 'object',
'$ref': '#'
}
},
'events': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'type': {
'type': 'string'
},
'handler': {
'type': 'object'
},
'dependencies': {
'type': 'array',
'items': {
'type': 'string'
}
}
}
}
}
}
}
私がchildrenプロパティで表現しようとしているのは、それがまったく同じスキーマを持つオブジェクトの配列であるということです。これはそれを説明する正しい方法ですか?
参照する必要のあるスキーマのid
を使用します
'$ref': 'tp_node'
ここを参照してください: http://json-schema.org/latest/json-schema-core.html#anchor
はい、スキーマは機能します。 "$ref": "#"
は、スキーマドキュメントのルートを指します。
ただし、"type": "object"
は役に立ちません。
{
'type': 'object',
'$ref': '#'
}
$ref
が存在する場合、他のすべてのキーワードは無視されます。 #/properties/children/items
スキーマからtype
を削除することをお勧めします。
定義と$ refを使用します。
次のスキーマをコピーしてこの オンラインjson/schema editor に貼り付け、結果を確認できます。
編集者のスクリーンショット:
スキーマコード:
{
"definitions": {
"TPNode": {
"title": "TPNode",
"description": "TPNode",
"type": "object",
"properties": {
"selector": {
"type": "string",
"required": true
},
"attributes": {
"type": "array",
"items": {
"title": "Attribute",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
},
"children": {
"type": "array",
"items": {
"$ref": "#/definitions/TPNode"
}
},
"events": {
"type": "array",
"items": {
"title": "Event",
"type": "object",
"properties": {
"type": {
"type": "string"
},
"handler": {
"type": "object"
},
"dependencies": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
}
},
"$ref": "#/definitions/TPNode"
}
再帰の例。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"person": {
"type": "object",
"properties": {
"name": { "type": "string" },
"children": {
"type": "array",
"items": { "$ref": "#/definitions/person" },
"default": []
}
}
}
},
"type": "object",
"properties": {
"person": { "$ref": "#/definitions/person" }
}
}