je dois valider un objet JSON qui ont toujours 2 propriétés:validation de jsonschema des propriétés requises et/ou sous condition nécessaire
- Type
- Nom
type peut être "A", "B" ou "C",
lorsque le type est "A", la propriété "foo" est également requise et aucune propriété supplémentaire n'est autorisée.
OK:
{
"type": "A",
"name": "a",
"foo": "a",
}
Non OK:
{
"type": "A",
"name": "a",
"foo": "a",
"lol": "a"
}
lorsque le type est "B", la propriété "bar" est nécessaire et pas de propriétés supplémentaires sont autorisés. Lorsque le type est "C", la propriété "barre" est requise et éventuellement la propriété "zen" peut être présente.
OK:
{
"type": "C",
"name": "a",
"bar": "a",
"zen": "a"
}
{
"type": "C",
"name": "a",
"bar": "a",
}
Non OK:
{
"type": "C",
"name": "a",
"bar": "a",
"lol": "a"
}
Malheureusement, la réponse exceptionnelle à cette question couvrir partiellement mon cas, mais je ne l'ai pas réussi à construire une jsonschema qui fonctionne pour moi.
modifier:
Voici ce que j'ai essayé.
{
"$schema": "http://json-schema.org/draft-04/schema",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["A", "B", "C"]
},
"name": {"type": "string"},
"foo": {"type": "string"},
"bar": {"type": "string"},
"zen": {"type": "string"},
},
"anyOf": [
{
"properties": {"type": {"enum": ["A"]}},
"required": ["foo"],
},
{
"properties": {"type": {"enum": ["B"]}},
"required": ["bar"],
},
{
"properties": {"type": {"enum": ["C"]}},
"required": ["bar"],
},
]
}
Mon problème est que la mise en le champ « additionalProperties » false à l'intérieur des objets « ANYOF » ne me donne pas le résultat escompté.
par exemple les JSON suivantes passent la validation, malgré qu'il a la propriété supplémentaire « lol »
{
"type": "A",
"name": "a",
"foo": "a",
"lol": "a"
}
J'ai mis à jour mon post pour inclure l'exemple que j'ai essayé et la raison pour laquelle cette solution ne fonctionne pas pour moi – cunfusu