web-dev-qa-db-ja.com

JSONスキーマで宣言されているプロパティのみを許可します

私はjson-schemaを使用しており、このファイルで宣言されたプロパティのみが検証に合格することを許可したいと考えています。たとえば、ユーザーがjsonオブジェクトで「name」プロパティを渡すと、「name」がプロパティとしてここにリストされていないため、このスキーマに失敗します。

リストされたプロパティのみを通過させる「必須」に類似した機能はありますか?

{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Accounting Resource - Add Item",
"type": "object",
"properties": {
    "itemNumber": {
        "type":"string",
        "minimum": 3
    },
    "title": {
        "type":"string",
        "minimum": 5
    },
    "description": {
        "type":"string",
        "minimum": 5
    }
},
"required": [
    "itemNumber",
    "title",
    "description"
]
}
54
ipengineer

これを達成するために必要なことは、additionalPropertiesをfalseに設定することです。仕様を参照してください here

76
Jules

参考までに、標準のv5では "unknown property" 検証モードが記述されているようです。

したがって、この要件をフォーマットの一部にする(Chris Pitmanがコメントで述べているように、将来の拡張性を損なう)代わりに、validatorに指示するだけです不明なプロパティにエラーとしてフラグを立てます。したがって、これは開発者にとって便利な非常に厳密な検証モードのようなものです。

一部のバリデーターはすでにこれをサポートしています(例 tv4 ):

var result = tv4.validateMultiple(data, schema, checkRecursive, banUnknownProperties);

このツールでは、データに循環参照がある場合はcheckRecursiveを使用する必要があり、banUnknownPropertiesexactlyを実行します"additionalProperties":falseを使用せずに必要な場合。

3
cloudfeet