私はjsonスキーマを持っています。私は3種類のメディア、キャプション、イメージ、およびアバターを持っています。jsonスキーマの値から型参照を取得する方法
これらのメディアタイプはそれぞれ構造が異なるため、有効なオプションを指定するには$ref
とoneOf
を使用しています。
ただし、兄弟の値に基づいてどの基準を使用するかを指定する方法はわかりません。
私のスキーマは、この
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"}
}
}
}
}
と私はアバターのような
mediaItem = {
"mediaType":"avatar",
"content": {
"name": "user name",
"avatar": "https://urlToImage
}
}
を定義するときに、それが有効である必要がありますが、私は
mediaItem = {
"mediaType": "avatar",
"content": "https://urlToImage"
}
としてアバターを定義した場合のように見えますアバターのメディアタイプには有効でないため、エラーを投げるべきです。
のような単一要素の列挙型に置き換えることはできますが、エラーレポートはかなり悪いです。私のテストでは、私は '期待 'data.mediaTypeは定数に等しくなければならない、data.mediaTypeは定数に等しくなければならず、data.mediaTypeは定数と等しくなければならず、データはoneOfで正確に一つのスキーマと一致しなければならない。エラー出力?どのようなスキーマが必要なのでしょうか? – pedalpete
どのjsonスキーマライブラリを使用していますか? – erosb
私はajvを使用しています、あなたはそれに精通していますか?たぶん別の質問かもしれないが、私はエラーがライブラリ間で標準化されると思った。 https://github.com/epoberezkin/ajv、私はそれを調べます。あなたの質問に迷惑をかけて申し訳ありません。 – pedalpete