web-dev-qa-db-fra.com

Autoriser uniquement les propriétés déclarées dans le schéma JSON

J'utilise json-schema et je souhaite autoriser uniquement les propriétés déclarées dans ce fichier à passer la validation. Par exemple, si un utilisateur transmet une propriété "nom" dans son objet json, ce schéma échouera car "nom" n'est pas répertorié ici en tant que propriété.

Existe-t-il une fonction similaire à "requise" qui ne permettra aux propriétés répertoriées de passer?

{
"$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

Je crois que ce que vous devez faire pour y parvenir est défini sur additionalProperties sur false. Voir la spécification ici

76
Jules

FYI - il semble que la version 5 de la norme décrira un mode de validation "bannir les propriétés inconnues" .

Ainsi, au lieu de faire de cette exigence une partie du format (qui, comme le dit Chris Pitman dans les commentaires, nuit à l'extensibilité future), vous pouvez simplement demander à votre validateur de marquer les propriétés inconnues comme des erreurs. Donc, c'est comme un mode de validation super strict qui est utile pour les développeurs.

Certains validateurs le supportent déjà (par exemple tv4 ):

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

Avec cet outil, checkRecursive doit être utilisé si vos données peuvent avoir des références circulaires, et banUnknownProperties fera exactement ce que vous voulez, sans avoir à utiliser "additionalProperties":false.

3
cloudfeet