101 votes

N'autoriser que les propriétés qui sont déclarées dans le schéma JSON

J'utilise json-schema et je souhaite que seules les propriétés déclarées dans ce fichier puissent être validées. Par exemple, si un utilisateur introduit une propriété "name" dans son objet json, ce schéma échouera parce que "name" n'est pas répertorié ici comme une propriété.

Existe-t-il une fonction similaire à "required" qui n'autorise que les propriétés listées à 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"
]
}

138voto

Jules Points 5015

Je crois que ce que vous devez faire pour y parvenir est de définir additionalProperties à faux. Voir la spécification aquí

9voto

andi Points 1035

Dans votre définition, fournissez :

  • tous les champs obligatoires dans l'intérieur de l'obligatoire "required": []
  • et mettre "additionalProperties": false

DEMO :

sans "additionalProperties": false : enter image description here

avec "additionalProperties": false : enter image description here

6voto

cloudfeet Points 1984

Pour information - il semble que la v5 de la norme décrira une "interdire les propriétés inconnues" mode de validation.

Ainsi, au lieu d'intégrer cette exigence dans le format (ce qui, comme le dit Chris Pitman dans les commentaires, nuit à l'extensibilité future), vous pouvez simplement donner des instructions à votre fichier validateur pour signaler les propriétés inconnues comme des erreurs. Ainsi, c'est comme un mode de validation très strict qui est utile pour le développement.

Certains validateurs prennent déjà en charge cette fonction (par ex. 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 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X