web-dev-qa-db-fra.com

Comment utiliser la condition `If`` then`` else` dans le schéma json?

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:

https://www.jsonschemavalidator.net/

3
Mohammad Irfan

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
}
2
Relequestual

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": [] 
    }
}
0
S. Miranda