When validating JSON objects with Joi in JavaScript we sometimes need an object to have any one of a set of possible keys, i.e. one or more of the specific keys given.
The schema below achieves this with the or() function.
const customerSchema = Joi.object().keys({ id: Joi.string().optional(), accountNumber: Joi.number().optional(), emailAddress: Joi.string().optional() }) .or('id', 'accountNumber', 'emailAddress') // At least one of these keys must be in the object to be valid. .required()
If we supply a JSON object like below to the Joi schema validate function, we will see a Joi schema validation error similar to the example.
{ "name": "test" }
Joi validation error:
"message": "object must contain at least one of [id, accountNumber, emailAddress]"
However, any of the following are valid examples:
{ "id": "1234" }
{ "id": "1234", "emailAddress": "test@test.com" }
Note that we can also use the related functions and(), xor(), nand(), and others to achieve other logical requirements on object keys.