2017-10-01 2 views
0

J'ai cette exigence de schéma où si A et B ne sont pas présents C doit être et si C est présent A et B ne devraient pas l'être.json schéma, dépendance conditionnelle par propriété étant présente ou non

Par exemple:

{ 
    "group1": { 
    "a": 10 
    }, 
    "group2": { 
    "group3": { 
     "b": 30 
    } 
    }, 
    "group4": { 
    "c": 20 
    } 
} 

Si a est présent, b et c ne devrait pas être dans le JSON. Si b et c sont présents, a ne devrait pas être dans le json.

Je peux voir que dans la spécification du schéma v6 json il y a un mot-clé switch qui pourrait aider avec ces exigences mais ne pas être en mesure de le faire fonctionner.

Cette validation de schéma est-elle possible même avec les spécifications actuelles?

Répondre

2

draft-06 est la spécification actuelle, mais il n'y a pas encore de conditionnelle. projet-07 a si/alors/en utilisant autre que vous pouvez:

{ 
    "if": {"required": ["a"]}, 
    "then": {"not": {"$ref": "#/definitions/bc"}}, 
    "else": {"$ref": "#/definitions/bc"}, 
    "definitions": { 
    "bc": { 
     "anyOf": [ 
     {"required": ["b"]}, 
     {"required": ["c"]} 
     ] 
    } 
    } 
} 

Actuellement if/then/else est pris en charge dans Ajv avec AJV-mots clés.

Toute condition peut être exprimée sans if/then/else en utilisant des mots-clés ANYOF, allof et non:

{ 
    "anyOf": [ 
    {"allOf": [ifSchema, thenSchema]}, 
    {"allOf": [{"not": ifSchema}, elseSchema]} 
    ] 
} 
+0

merci! comment cela fonctionnerait-il dans mon exemple avec la deuxième option? – themonkey

+0

Il suffit de substituer les sous-schémas du premier échantillon – esp