JSON-Schema zum Erzwingen von Array-Inhalten
Hallo zusammen und vielen Dank im Voraus.
Ich versuche, ein JSON-Schema zu erstellen, um ein Array zu erzwingen, das ein A- und ein B-Objekt und N C-Objekte enthält, wobei A und B C-Objekte sind und N eine ganze Zahl ist, die zwischen 0 und unendlich liegt.
Dafür:
[A, B]
[A, B, C1]
[A, B, C1, .., CN]
Sind allegültigobwohl:
[A]
[A, C1]
[A, C1, .., CN]
Sindungültig.
Um dies zu verdeutlichen, müssen A und B vorhanden sein. C-Objekte sind optional, obwohl Sie möglicherweise so viele haben, wie Sie möchten.
C-Objektschemata:
{
"$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
}
Ein C-Objekt ist also ein beliebiges gültiges JSON-Objekt, das nur die Eigenschaften "id" und "name" enthält, wobei "id" eine Ganzzahl und "name" eine Zeichenfolge ist.
A- und B-Objektschemata:
{
"$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- und B-Objekte unterscheiden sich von C-Objekten darin, dass der Namenswert erzwungen wird. Der Namenswert eines A-Objekts muss ein Wert sein, der im Feld enum enthalten ist, wobei enum einen einzelnen Wert enthält.
Mein bisher vollständigstes Schema ist:
{
"$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
}
]
}
}
Dies erzwingt, dass alle darin enthaltenen Objekte vom Typ C sein müssen, also A und B, obwohl ich nicht sicher bin, wie ich sicherstellen soll, dass mindestens eine Instanz von A und B in meinem Array enthalten ist.