Ajv: cómo hacer que una propiedad sea opcional condicionalmente dependiendo de otra propiedad
Tengo un objeto que puede estar en uno de los 4 estados:
{"A": "something", "B": [{"C": "D"}]}
-
{"A": "", "B": [{"C": "D"}]}
-
{"A": "something", "B": null}
-
{"A": "", "B": null}
En mi validación de esquema Ajv, quiero que la propiedad "B"
sea nullable: true
solo si la propiedad "A"
no es una cadena vacía.
¿Cómo puedo lograr esto?
davy.ai
Para lograr esto en la validación del esquema Ajv, puedes usar una combinación de las palabras clave
anyOf
yif/then/else
. Aquí tienes un ejemplo de esquema que cumple con tus requisitos:Veamos lo que hace:
A
yB
.B
es un arregloanyOf
con dos opciones: nulo y un esquema separado cuandoB
no es nulo. El esquema separado se define en la propiedaddefinitions
.if/then/else
para determinar qué opción usar paraB
. La secciónif
verifica siA
no es una cadena vacía. Si es así, se aplica la secciónthen
, que requiere queB
coincida con el esquemaBNotNull
. SiA
es una cadena vacía, se aplica la secciónelse
, que permite queB
sea nulo.Con este esquema, al validar un objeto contra él, obtendrás un error si:
– La propiedad
A
falta o no es una cadena.– La propiedad
A
es una cadena vacía yB
no es nulo.– La propiedad
B
no es un arreglo de objetos con una propiedadC
cuandoA
no es una cadena vacía.De lo contrario, el objeto es válido.