tutorial - json schema validator javascript online
Cómo definir un esquema JSON que requiere al menos una de muchas propiedades (1)
Para requerir al menos una de un conjunto de propiedades, use required
dentro de una serie de opciones anyOf
:
{
"type": "object",
"anyOf": [
{"required": ["id"]},
{"required": ["email"]}
// any other properties, in a similar way
],
"properties": {
// Your actual property definitions here
}
{
Si alguna de las propiedades que desea está presente ( "id"
, "email"
), entonces pasará la opción correspondiente en allOf
.
Me gustaría saber si puedo definir un esquema JSON (borrador 4) que requiera al menos una de las muchas propiedades posibles para un objeto. Ya conozco allOf
, anyOf
y oneOf
pero simplemente no sé cómo usarlos de la manera que quiero.
Aquí hay algunos ejemplos de JSON para ilustrar:
// Test Data 1 - Should pass
{
"email": "[email protected]",
"name": "John Doe"
}
// Test Data 2 - Should pass
{
"id": 1,
"name": "Jane Doe"
}
// Test Data 3 - Should pass
{
"id": 1,
"email": "[email protected]",
"name": "John Smith"
}
// Test Data 4 - Should fail, invalid email
{
"id": 1,
"email": "thisIsNotAnEmail",
"name": "John Smith"
}
// Test Data 5 - Should fail, missing one of required properties
{
"name": "John Doe"
}
Me gustaría solicitar al menos una id
o un email
(que también acepte a ambos) y seguir aprobando la validación según el formato. El uso de oneOf
falla la validación si proporciono ambas (prueba 3), anyOf
pasa la validación incluso si una de ellas no es válida (prueba 4)
Aquí está mi esquema:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "https://example.com",
"properties": {
"name": {
"type": "string"
}
},
"anyOf": [
{
"properties": {
"email": {
"type": "string",
"format": "email"
}
}
},
{
"properties": {
"id": {
"type": "integer"
}
}
}
]
}
¿Puede ayudarme a lograr la validación correcta de mi caso de uso?