Как написать схему JSON для обеспечения условного существования других свойств?
Схема должна проверять следующие объекты json и не должна допускать каких-либо дополнительных свойств.
{
"id": "11111111111111111111111111111111",
"status": "employed",
"company_name": "Google"
}
{
"id": "00000000000000000000000000000000",
"status": "unemployed"
}
Чертеж схемы v4:
{
"type": "object",
"additionalProperties":false,
"required": [
"status",
"id"
],
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string",
"enum":["unemployed", "employed"]
},
"company_name": {
"type": "string"
}
},
"dependencies": {
"company_name": {
"properties": {
"status": {
"enum": [
"employed"
]
}
}
}
}
}
Эта схема выглядит правильно, но она не делает недействительным следующий объект json.
{
"id": "00000000000000000000000000000001",
"status": "employed"
}
Он должен быть недействительным, потому что "status" "занят", но обязательное свойство "company_name" не указано.
1 ответ
Это возможно, используя anyOf, но не уверен, как это сделать, используя зависимости.
{
"type": "object",
"additionalProperties": false,
"required": [
"status",
"id"
],
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"unemployed",
"employed"
]
},
"company_name": {
"type": "string"
}
},
"anyOf": [
{
"properties": {
"status": {
"enum": [
"employed"
]
}
},
"required": [
"company_name"
]
},
{
"properties": {
"status": {
"enum": [
"unemployed"
]
}
},
"not": {
"required": [
"company_name"
]
}
}
]
}
Благодаря esp.