JSON Schema - требуется все свойства
Поле required
в схеме JSON
JSON Schema имеет поля properties
, required
и additionalProperties
. Например,
{
"type": "object",
"properties": {
"elephant": {"type": "string"},
"giraffe": {"type": "string"},
"polarBear": {"type": "string"}
},
"required": [
"elephant",
"giraffe",
"polarBear"
],
"additionalProperties": false
}
Будет проверять объекты JSON, например:
{
"elephant": "Johnny",
"giraffe": "Jimmy",
"polarBear": "George"
}
Но не удастся, если список свойств не является точно elephant, giraffe, polarBear
.
Проблема
Я часто копирую-вставляю список properties
в список required
и подвергаюсь раздражающим ошибкам, когда списки не совпадают из-за опечаток и других глупых ошибок.
Есть ли более короткий способ обозначить, что все свойства необходимы, без явного их названия?
Ответы
Ответ 1
Вы можете просто использовать свойство "minProperties", а не explicity, называя все поля.
{
"type": "object",
"properties": {
"elephant": {"type": "string"},
"giraffe": {"type": "string"},
"polarBear": {"type": "string"}
},
"additionalProperties": false,
"minProperties": 3
}
Ответ 2
Я сомневаюсь, что существует способ указать требуемые свойства, кроме явно указывать их в требуемом массиве.
Но если вы столкнулись с этой проблемой очень часто, я предлагаю вам написать небольшой script, который будет обрабатывать вашу json-схему и автоматически добавить необходимый массив для всех определенных объектов.
script нужно просто пересечь дерево json-schema, и на каждом уровне, если найдено ключевое слово "properties", добавьте ключевое слово "required" со всеми определенными ключами, содержащимися в свойствах на том же уровне.
Пусть машины делают материал для бурения.
Ответ 3
Я делаю это в коде с одним слоем, например, если я хочу использовать required
для insert
в БД, но хочу только проверять схему при выполнении update
.
prepareSchema(action) {
const actionSchema = R.clone(schema)
switch (action) {
case 'insert':
actionSchema.$id = `/${schema.$id}-Insert`
actionSchema.required = Object.keys(schema.properties)
return actionSchema
default:
return schema
}
}