こんにちは、よろしくお願いします。
1 つの A および B オブジェクトと NC オブジェクトを含むように配列を強制する JSON スキーマを作成しようとしています。ここで、A と B は C オブジェクトであり、N は 0 から無限大までの整数です。
そのため:
[A, B]
[A, B, C1]
[A, B, C1, .., CN]
ただし、すべて有効です。
[A]
[A, C1]
[A, C1, .., CN]
無効です。
明確にするために、A と B が存在する必要があります。C オブジェクトはオプションですが、好きなだけ持つことができます。
C オブジェクト スキーマ:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "C Object",
"type": "object",
"required": ["id", "name"],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
},
"additionalProperties": false
}
したがって、C オブジェクトは、プロパティ「id」と「name」のみを含む任意の有効な JSON オブジェクトです。ここで、「id」は整数で、「name」は文字列です。
A および B オブジェクト スキーマ:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "A Object",
"type": "object",
"required": ["id", "name"],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string",
"enum": ["A"]
}
},
"additionalProperties": false
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "B Object",
"type": "object",
"required": ["id", "name"],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string",
"enum": ["B"]
}
},
"additionalProperties": false
}
A および B オブジェクトは、名前の値が適用されるという点で C オブジェクトとは異なります。A オブジェクトの名前の値は、フィールド enum に含まれる値である必要があります。ここで、enum には単一の値が含まれます。
これまでで最も完全なスキーマは次のとおりです。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "To Date Solution",
"description": "So far this is the most complete attempt at enforcing values to be contained within a JSON structure using JSON schemas.",
"type": "array"
"items": {
"allOf": [
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "C Object",
"type": "object",
"required": ["id", "name"],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
},
"additionalProperties": false
}
]
}
}
これにより、含まれるすべてのオブジェクトが A と B であるタイプ C でなければならないことが強制されますが、A と B の少なくとも 1 つのインスタンスが私の配列に含まれるようにする方法はわかりません。