Wie kann ich mehrere Schemas deklarieren und einen Validator abhängig von einer Eigenschaft auswählen lassen?
Zum Beispiel möchte ich, dass dieses json gegen das zweite Schema für type2 validiert wird
{
"id2": 1,
"name": "A green door",
"price": 12.50,
"tags": ["home", "green"],
"schemaToValidate" : "type2"
}
Eine erste Schemadefinition für das Objekt vom Typ1:
{
"$schema": "http://json-schema.org/draft-06/schema#",
"title": "Product",
"description": "A product from Acme"s catalog",
"type": "object",
"required": ["id1"],
"schemaForType" : "type1"
}
Eine zweite Schemadefinition für das Objekt vom Typ 2:
{
"$schema": "http://json-schema.org/draft-06/schema#",
"title": "Product",
"description": "A product from Acme"s catalog",
"type": "object",
"required": ["id2"],
"schemaForType" : "type2"
}
Ich habe versucht, dafür eine Probe zu finden http://json-schema.org/example1.html aber nicht realisiert, ob es überhaupt möglich ist.
Antworten:
2 für die Antwort № 1Es ist nicht möglich, mehrere Schemata abhängig von einem Typ zu haben, aber es gibt eine Alternative: Ändern Sie Ihr Beispiel, um oneOf zu verwenden (vereinfacht auch, um einfacher für das Schema zu sein):
{
"Type2" : {
"id2": 1
}
}
Und mit einem Schema, das auf einem von Type1 und Type2 arbeiten kann hinzugefügt werden:
{
"description" : "schema validating Type1 and Type2",
"type" : "object",
"oneOf" : [{
"properties" : {
"Type1" : {
"type": "object",
"properties" : {
"id1" : {
"type" : "integer"
}
},
"additionalProperties": false
}
},
"required" : [ "Type1" ]
}, {
"properties" : {
"Type2" : {
"type": "object",
"properties" : {
"id2" : {
"type" : "integer"
}
},
"additionalProperties" : false
}
},
"required" : ["Type2"]
}
]
}
Ein weiteres Beispiel für AnyOf