Ответ 1
[отказ от ответственности: автор следующей спецификации проверки JSON Schema здесь]
ОК, непонятно, что вы просите, см. ниже, но один из ваших примеров явно не делает то, что вы хотите, это тот, на котором вы пишете:
{ "type": [ "object", "any" ] }
Это эквивалентно пустой схеме и, как таковая, проверяет каждый экземпляр.
Один из способов, которым я читаю ваш вопрос, состоит в том, что вы хотите, чтобы ваши данные JSON были либо массивом тегов, либо объектом с хотя бы членами с именем id
, name
и price
. Поскольку вы, кажется, используете проект v3, у вас есть только одно решение:
{
"type": [
{
"description": "schema for tags array here",
},
{
"description": "schema for the base object here"
}
]
}
Эта конструкция означает, что экземпляр должен подчиняться хотя бы одной схеме внутри type
(и вы также можете смешивать ее с примитивными типами).
Однако: текущий черновик теперь v4, вы должны теперь написать:
{
"anyOf": [
{
"description": "schema for tags array here",
},
{
"description": "schema for the base object here"
}
]
}
Обратите внимание, что не все реализации поддерживают проект v4 или конструкцию для type
выше. На самом деле, очень немногие делают. См. Ниже ссылку на онлайн-валидатор схемы, который поддерживает оба.
Еще один способ, которым я прочитал ваш вопрос, - это разрешить свойства, отличные от id
, name
и price
, как они есть. Это довольно просто. Просто не определяйте схему для tags
в properties
:
{
"type": "object",
"required": [ "id", "name", "price" ]
"properties": {
"id": {
"type": "number"
},
"name": {
"description": "Name of the product"
},
"price": {
"type": "number",
"minimum": 0
}
}
}
Поскольку вы не указываете additionalProperties
как false
, экземпляр объекта может иметь любое количество дополнительных членов, и эти члены могут быть любыми.
Ссылка на онлайн-валидатор, который может проверить ваши схемы: здесь