スキーマの検証を変更して、特定のオブジェクトに最も適切なスキーマを見つける方法を探しています。我々は、スキーマを持っているとしましょう:AJVで無効なオブジェクトのスキーマをカスタマイズする
{
"oneOf": [
{
"$ref": "#/definitions/a"
},
{
"$ref": "#/definitions/b"
}
],
"definitions": {
"a": {
"type": "object",
"properties": {
"prop1": {
"enum": ["x"]
}
},
"required": ["prop1"]
},
"b": {
"type": "object",
"properties": {
"prop1": {
"enum": ["y"]
},
"prop2": {
"type": "string"
}
},
"required": ["prop1", "prop2"]
}
}
}
を今、私はオブジェクト{ "prop1": "y" }
を持っている場合、私はそれがこのスキームのために本当に有効でない場合でも、それは#/definitions/b
タイプのように解決することにしたいです。つまり、解決のためにちょうどprop1
プロパティを使用したいと思います。
スキーマ自体を再構築することなく、AJVカスタムキーワードを使用してそれを行う方法があるのだろうか?特に、スキーマがオブジェクトに対して有効でない場合、カスタムキーワードを使用してそれをオーバーライドして有効にすることは可能ですか?目的が唯一の正しいスキーマからエラーを報告する場合は、使用することができます
をそれは私が怖い、助けにはなりません。一般的な目的は、スキーマに従ってJSONオブジェクトを編集するためのUIを構築することです。したがって、スキーマに 'oneOf'がある場合、私はどのような変種を選ぶべきかを知る必要があります。問題は、オブジェクトが不完全なために現在無効である可能性があります(必須フィールドが存在しないか、同じ方法でネストされたプロパティが無効な場合など)、何とかAJVをトリックする方法を見つける必要があります(適切なスキーマを解決するために1つのAJVインスタンスを使用し、実際の検証のために他のインスタンスを使用しています)、正しいスキーマを見つけることができます。 –
Ajvはスキーマに対してデータを検証します。スキーマ(JSON)を取り、検証関数(コード)を作成しますが、このような「最終的な」スキーマなどはありません。 if/then/elseと一緒にカスタムキーワードを使用して、 "if"ブランチまたは "else"ブランチでどのスキーマが検証されているかを知らせたり、エラーからこの情報を導き出すことができます(検証が失敗した場合)。 – esp
変更を参照してください – esp