Un ajout relativement nouveau au schéma JSON (brouillon 07) ajoute les mots clés if, then et else Je n'arrive pas à comprendre comment utiliser ces nouveaux mots clés correctement. Voici mon schéma JSON jusqu'à présent:
{
"type": "object",
"properties": {
"foo": {
"type": "string"
},
"bar": {
"type": "string"
}
},
"if": {
"properties": {
"foo": {
"enum": [
"bar"
]
}
}
},
"then": {
"required": [
"bar"
]
}
}
Si la propriété "foo" est égale à "bar", la propriété "bar" est requise. Cela fonctionne comme prévu.
Cependant, si la propriété "foo" n'existe pas ou si l'entrée est vide, je ne veux plus rien. comment faire cela?
empty input {}.
Erreurs trouvées:
Les propriétés requises sont absentes de l'objet: bar . Chemin du schéma: #/then/required
J'utilise l'outil de validation en ligne:
Le mot clé if
signifie que, si le résultat du schéma de valeur réussit la validation, appliquez le schéma then
, sinon appliquez le schéma else
.
Votre schéma ne fonctionnait pas car vous deviez exiger "foo"
dans votre schéma if
. Dans le cas contraire, une instance JSON vide passerait la validation du schéma if
et appliquerait donc le schéma then
qui nécessite "bar"
.
Deuxièmement, vous voulez "propertyNames":false
, ce qui empêche d’avoir des clés dans le schéma, contrairement à ce qui se passe si vous définissez "else": false
, ce qui empêcherait toujours la validation de la validation.
{
"type": "object",
"properties": {
"foo": {
"type": "string"
},
"bar": {
"type": "string"
}
},
"if": {
"properties": {
"foo": {
"enum": [
"bar"
]
}
},
"required": [
"foo"
]
},
"then": {
"required": [
"bar"
]
},
"else": false
}
Ne pouvez-vous pas simplement utiliser la propriété "else"?
{
"type": "object",
"properties": {
"foo": { "type": "string" },
"bar": { "type": "string" }
},
"if": {
"properties": {
"foo": {
"enum": ["bar"]
}
}
},
"then": {
"required": ["bar"]
},
"else": {
"required": []
}
}