JSON Schema-require toutes les propriétés
required
Champ dans le schéma JSON
le schéma JSON comporte le properties
,required
et additionalProperties
champs. Par exemple,
{
"type": "object",
"properties": {
"elephant": {"type": "string"},
"giraffe": {"type": "string"},
"polarBear": {"type": "string"}
},
"required": [
"elephant",
"giraffe",
"polarBear"
],
"additionalProperties": false
}
va valider les objets JSON comme:
{
"elephant": "Johnny",
"giraffe": "Jimmy",
"polarBear": "George"
}
Mais échouera si la liste de propriétés n'est pas exactementelephant, giraffe, polarBear
.
Le problème
j'ai souvent des copier-coller la liste des properties
à la liste de required
, et souffrent de bugs gênants quand les listes ne correspondent pas à cause des fautes de frappe et d'autres erreurs stupides.
y a-t-il un moyen plus court pour indiquer que toutes les propriétés sont nécessaires, sans les nommer explicitement?
3 réponses
Vous pouvez simplement utiliser la propriété" minProperties " au lieu de nommer explicitement tous les champs.
{
"type": "object",
"properties": {
"elephant": {"type": "string"},
"giraffe": {"type": "string"},
"polarBear": {"type": "string"}
},
"additionalProperties": false,
"minProperties": 3
}
je doute qu'il existe un moyen pour spécifier les propriétés requises d'autres que de les nommer explicitement requis tableau.
mais si vous rencontrez ce problème très souvent, je vous suggérerais d'écrire un petit script qui post-traite votre JSON-schema et ajoute automatiquement le tableau requis pour tous les objets définis.
le script a juste besoin de parcourir l'arborescence JSON-schema, et à chaque niveau, si un mot-clé" properties "est trouvé, ajouter un mot-clé "required" avec toutes les clés définies contenues dans les propriétés au même niveau.
laissez les machines s'occuper de l'alésage.
je le fais EN code avec un one-liner, par exemple, si je veux utiliser required
insert
dans un DB, mais ne veulent valider par rapport au schéma lors de l'exécution d'un update
.
prepareSchema(action) {
const actionSchema = R.clone(schema)
switch (action) {
case 'insert':
actionSchema.$id = `/${schema.$id}-Insert`
actionSchema.required = Object.keys(schema.properties)
return actionSchema
default:
return schema
}
}