Ich habe ein JSON-Schema und ich habe 3 Arten von Medien, Bildunterschrift, Bild und Avatar.Wie bekomme ich Referenz vom Wert in JSON Schema
Jeder dieser Medientypen hat eine andere Struktur, daher verwende ich $ref
und oneOf
, um anzugeben, welche Optionen gültig sind.
Allerdings kann ich nicht herausfinden, wie man basierend auf dem Wert eines Geschwisters angeben, welche ref zu verwenden.
Mein Schema sieht wie folgt aus
const mediaSchema = {
"type": "object",
"required": ["mediaType", "content", "points"],
"properties":{
"mediaType": {"type":"string", "pattern": "^(image|avatar|caption)$"},
"content": {
"oneOf": [
{"$ref":"#/definitions/image"},
{"$ref": "#/definitions/caption"},
{"$ref": "#/definitions/avatar"}
],
}
},
"definitions": {
"caption":
{"type": "object",
"required": ["text"],
"properties": {
"text": {"type": "string"},
"fontSize": {"type": "string", "pattern": "^[0-9]{1,3}px$"}
}
},
"image": {"type": "string", "format": "url"},
"avatar":
{"type": "object",
"properties": {
"name": {"type": "string"},
"image": {"type": "string", "format":"url"}
}
}
}
}
und wenn ich einen Avatar wie
mediaItem = {
"mediaType":"avatar",
"content": {
"name": "user name",
"avatar": "https://urlToImage
}
}
definieren sollte es gültig sein, aber wenn ich definieren einen Avatar als
mediaItem = {
"mediaType": "avatar",
"content": "https://urlToImage"
}
es sollte einen Fehler werfen, da dies für einen Medientyp von Avatar nicht gültig ist.
ersetzen, die funktioniert, aber der Fehlerbericht ist ziemlich schlecht. In meinen Tests erwarte ich "data". MediaType sollte gleich sein, data.mediaType sollte gleich sein, data.mediaType sollte gleich sein, data sollte genau einem Schema in oneOf'' entsprechen, ist da ein schöner Fehler ausgegeben? Was schlägt vor, was das Schema sein sollte? – pedalpete
Welche JSON-Schema-Bibliothek verwenden Sie? – erosb
Ich benutze ajv, kennst du es? Wahrscheinlich eine separate Frage, ich dachte, Fehler würden in den Bibliotheken standardisiert. https://github.com/epoberezkin/ajv, ich werde dort nachsehen. Entschuldige, dass ich dich mit dieser Frage belästigt habe. – pedalpete