1

スキーマによって標準に記述されていないプロパティについて注意を喚起する方法はありますか? たとえば、次のスキーマ:

{
   "description": "foo and bar", 
   "type": "object", 
    "properties": {
       "foo": {
        "type": "number"
       }, 
       "bar": {
        "type": "string", 
        "enum": [
            "a", 
            "b", 
            "c"
        ]
       }
   }
}

この JSON を渡します。

{
   "foo": 12345, 
   "bar": "a",
   "baz": 12312
}

bazスキーマの一部ではないプロパティがありますが。

UPD: 現在、tv4ライブラリを使用しています。

4

1 に答える 1

3

オプション 1:additionalPropertiesスキーマ内

特定の定義にリストされているプロパティに明示的に制約する場合は、propertiesを使用できますadditionalProperties: falsepropertiesこれにより、近くのエントリで定義されたプロパティのみを使用するようにデータが制限されます。この場合は、"foo"および"bar".

ただし、 の使用はadditionalPropertiesスキーマ拡張に影響します。あなた (または他の誰か) が後でこのスキーマを ( allOf/を使用して) 拡張し$refた場合、データは引き続きこのスキーマの対象となります。そのため、他の場所での定義に関係なく、"foo"andの使用のみが許可されます。"bar"

オプション 2: banUnknownPropertiestv4 でフラグを立てる

完全なロックダウンが望ましくない場合はbanUnknownProperties、 tv4 (docs) でフラグを使用できます。基本的に、検証後、スキーマによって説明されなかったプロパティはすべてエラーとして発生します。

これは、追加のプロパティ (将来のバリエーション/拡張を含む) がデータ形式で理論的に許可されているが、予期しない場所に追加のプロパティが表示されたときに (テスト/警告の目的で) アラートを発したい場合のために設計されました。

于 2014-09-08T15:22:42.157 に答える