I would like to know if I can define a JSON schema (draft 4) that requires at least one of many properties possible for an object. I already know of allOf, anyOf and oneOf but just can't figure out how to use them in the way I want.
Here are some example JSON to illustrate :
// 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" } I would like to require at least id or email (also accepting both of them) and still pass validation according to format. Using oneOf fails validation if I provide both (test 3), anyOf passes validation even if one of them is not valid (test 4)
Here is my schema :
{ "$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" } } } ] } Can you help me how to achieve correct validation for my use case ?