¿Cómo establezco additionalProperties en false cuando estoy usando un array?
El archivo que se está validando se ve así:
MyArray:
- someItemWithRandomName:
one: f9jfw9j302
two: 09dj0293jff
three: 09dj0293jff
- someOtherItemWithRandomName:
one: f9jfw9j302
two: 09dj0293jff
three: 09dj0293jff
- anotherItem:
one: f9jfw9j302
two: 09dj0293jff
three: 09dj0293jff
Lo estoy validando de esta manera:
"MyArray": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"one",
"two",
"three"
],
"properties": {
"one": {
"type": "string"
},
"two": {
"type": "string"
},
"three": {
"type": "string"
}
}
}
No quiero permitir campos en los elementos del array que no estén definidos en el esquema pero additionalProperties: false
no funciona porque las claves de los elementos del array pueden ser cualquier cadena. ¿Cómo se acomoda esto?
Edición:
Aquí hay un ejemplo en vivo de mi validación. Supongo que el YAML se convertirá en JSON como en este ejemplo antes de ser validado: https://www.jsonschemavalidator.net/s/PBmLkkBl
davy.ai
Para adaptarse al hecho de que las claves de los elementos del array pueden ser cualquier cadena, puedes usar la palabra clave
patternProperties
en lugar deproperties
. Esto te permite definir un patrón de expresión regular que las claves deben cumplir para ser válidas.Por ejemplo, si deseas permitir cualquier cadena como clave pero aún así validar los valores de las propiedades, puedes modificar el esquema de la siguiente manera:
Esto seguirá requiriendo que los objetos del array tengan las propiedades
"one"
,"two"
y"three"
, mientras permite cualquier cadena como clave para propiedades adicionales. La palabra claveadditionalProperties
todavía está establecida en falso, pero la palabra clavepatternProperties
la anula para las claves que coinciden con la expresión regular.Ten en cuenta que puedes modificar la expresión regular para adaptarla a tus necesidades, dependiendo de qué cadenas deseas permitir como claves.