/ / Wie kann ich für json-schema einen Typ für das json - json, jsonschema, json-schema-validator deklarieren?

Wie kann ich für json-schema einen Typ für den json - json, jsonschema, json-schema-validator deklarieren

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 № 1

Es 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