Является ли определение схемы JSON AdditionalProperties применимо только к полям верхнего уровня, а не к каким-либо вложенным полям уровня?
Нет, вы должны иметь возможность поместить его на тот уровень, который вам нужен какПока это находится в схеме, описывающей объект.В вашем случае вы просто поместите его не в том месте.Это должно работать:
{
"type": "object",
"properties": {
"metadata": {
"type": "object",
"properties": {
"a": {
"type": "string"
},
"b": {
"type": "string"
},
"c": {
"type": "string"
}
},
"additionalProperties": false
},
"street_type": {
"type": "string",
"enum": [
"Street",
"Avenue",
"Boulevard"
]
}
}
}
Допустим, вы хотите проверить следующий объект как:
{
a: {
b: {
c: {
d: 42
}
}
}
}
Одна действительная схема для него будет:
{
"type": "object",
"additionalProperties": false,
"properties": {
"a": {
"type": "object",
"additionalProperties": false,
"properties": {
"b": {
"type": "object",
"additionalProperties": false,
"properties": {
"c": {
"type": "object",
"additionalProperties": false,
"properties": {
"d": {
"const": 42
}
}
}
}
}
}
}
}
}
Схема выше очень многословна, но здесь для иллюстрации.Вы должны быть в состоянии сделать его более лаконичным, используя $ref
и комбинируя схемы вместе.