Определенно голосование за четкий пример того, как преобразовать логические выражения в синтаксис схемы JSON.
ужно построить схему JSON (черновик 4), для которой требуется свойство, основанное на наличии свойства в другом вложенном объекте. Я уже искал и перепробовал много вещей (anyOf, oneOf, not, зависимости) без удачи.
Может быть, это невозможно в JSON-схеме?
Это моя упрощенная схема:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"required": ["dog"],
"properties": {
"dog": {
"type": "object",
"required": ["bananas"],
"properties": {
"bananas": { "$ref": "bananas.json" },
"thing": {
"type": "object",
"properties": {
"total": { "type": "string" }
}
}
}
}
}
}
А это бананы.json
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"required": ["banana"],
"definitions": {
"non-empty-string": {
"type": "string",
"minLength": 1
}
},
"properties": {
"banana": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["unit"],
"properties": {
"unit": { "type": "string" },
"thing": {
"type": "object",
"anyOf": [
{ "required": [ "tax_transfers" ] },
{ "required": [ "tax_retentions" ] }
],
"properties": {
"tax_transfers": {
"type": "object",
"required": ["tax_transfer"],
"properties": {
"tax_transfer": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"rate": { "type": "string" }
}
}
}
}
},
"tax_retentions": {
"type": "object",
"required": ["tax_retention"],
"properties": {
"tax_retention": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"rate": { "type": "string" }
}
}
}
}
}
}
}
}
}
}
}
}
Мне это нужно, когда один или несколько объектов в массиве имеют свойство 'вещь' (в бананах -> банан -> вещь). Тогда свойство 'вещь' в (собака -> вещь) должно быть обязательным.
Любая помощь могла бы быть полезна.