JSON-SCHEMA произвольные имена на верхнем уровне
Я использую json-схему с бэкэндом nodeJs под названием 'feathers-plus', который проверяет данные с помощью популярного ajv.
У меня есть два объекта -> ObjectA & ObjectB, где ObjectA является родителем. ObjectA содержит коллекцию ObjectB, у которой есть произвольные имена, определенные patternProperties, и которые являются объектами:
exchanges: {
type: 'object',
patternProperties: {
"^[A-Za-z]+$": {
type: 'object'
}
},
additionalProperties: false
},
ObjectB (который в моем случае является обменом) начинается с этого имени произвольного ключа на верхнем уровне, а затем содержит больше свойств (на втором уровне и т. Д.).
Проблема в том, что я не знаю, как определить имена этих произвольных ключей. Я знаю, как определить его на втором уровне и глубже, используя приведенный выше пример для бирж. Но сверху, я полагаю, я не могу написать что-то вроде этого:
"^[A-Za-z]+$": {
type: 'object'
}
С перьями плюс мы можем разделить наши логические объекты в сервисах. В моем случае, верхний сервис называется "конфиги", а дочерний - "обменяет".
Любая помощь будет благодарна.
Спасибо!
РЕДАКТИРОВАТЬ: по запросу я публикую свои текущие схемы для обоих объектов:
Родительский объект A ->
let schema = {
title: 'Configs',
description: 'Configs database.',
required: [
'name',
'bot',
'GUI',
'ws',
'createdAt',
'updatedAt'
],
uniqueItemProperties: [
],
properties: {
id: { type: 'ID' },
name: {},
pairs: {
type: 'object',
patternProperties: {
"^[A-Za-z]+$": {
type: 'object'
}
},
additionalProperties: false
},
// THIS IS THE CONTAINER FOR EXCHANGES OBJECTS
exchanges: {
type: 'object',
patternProperties: {
"^[A-Za-z]+$": {
type: 'object'
}
},
additionalProperties: false
},
// END
bot: {
type: 'object',
properties: {
debug: { type: 'boolean' },
gui: { type: 'boolean' },
period_storage_ticker: { type: 'number' },
interval_ticker_update: { type: 'number' },
timeout_buy: { type: 'number' },
timeout_sell: { type: 'number' },
WATCH_MODE: { type: 'boolean' },
TELEGRAM_ENABLED: { type: 'boolean' },
TELEGRAM_NICK: {},
TOKEN: {},
chat_id: { type: 'number' }
},
required: [
'debug',
'gui',
'period_storage_ticker',
'interval_ticker_update',
'timeout_buy',
'timeout_sell',
'WATCH_MODE',
'TELEGRAM_ENABLED',
'TELEGRAM_NICK',
'TOKEN',
'chat_id'
]
},
GUI: {
type: 'object',
properties: {
enabled: { type: 'boolean' },
start: { type: 'boolean' },
port: { type: 'number' },
https: { type: 'boolean' },
key: {},
cert: {},
networktraffic: { type: 'boolean' },
authentication: {
type: 'object',
properties: {
login: { type: 'boolean' },
twoFA: { type: 'boolean' }
},
required: [
'login',
'twoFA'
]
},
notifications: {
type: 'object',
properties: {
trade: { type: 'boolean' },
callback: { type: 'boolean' },
error: { type: 'boolean' }
},
required: [
'trade',
'callback',
'error'
]
}
},
required: [
'enabled',
'start',
'port',
'https',
'key',
'cert',
'networktraffic',
'authentication',
'notifications'
]
},
ws: {
type: 'object',
properties: {
port: { type: 'number' },
clientport: { type: 'number' },
hostname: {}
},
required: [
'port',
'clientport',
'hostname'
]
}
createdAt: {},
updatedAt: {}
}
}
Дочерний объект B ->
let schema = {
title: 'Exchanges',
description: 'Exchanges database.',
// MY CURRENT EDIT (NOT WORKING)
type: 'object',
patternProperties: {
"^[A-Za-z]+$": { type: 'boolean' }
},
additionalProperties: false,
// END
required: [
],
uniqueItemProperties: [
],
properties: {
},
}
Если я делаю запрос и пытаюсь что-то передать, это работает, и проверка не производится. Те же самые свойства patternProperties, установленные на более глубоком уровне, не имеют никаких проблем и проверяются правильно.