json-схема с дополнительными свойствами типа x и хотя бы одним

#jsonschema

#jsonschema

Вопрос:

Вопрос:

Есть ли способ сообщить json-schema, что мне нужны дополнительные свойства типа x и хотя бы одно?

краткое объяснение (на основе приведенного ниже блока кода):

Я хочу иметь json-файл с одним обязательным элементом, a. b является необязательным, и мне нужен минимум один дополнительный элемент. Имя дополнительного элемента должно быть гибким. По этой причине я не могу присвоить ему конкретное имя и пометить его как требуется. И поскольку b является необязательным, я не могу использовать «minProperties»

что-то вроде: (не существует)

 "additionalProperties": {
    "type": "string",
    "minAdditionalProperties": 1
  }
  

незавершенная json-схема

 {
 "$schema": "http://json-schema.org/draft-07/schema",
  "type": "object",
  "properties": {
    "a": {
        "type": "number"
    },
    "b": {
        "type": "number" 
    }
  },
  "required": ["a"],
  "additionalProperties": {
    "type": "string"
  }
}

  

ожидаемый результат:

b всегда является необязательным

 invalid:
{
    "a": 1
}
----
{
    "a": 1,
    "b": 2
}

valid:
{
    "a": 1,
    "x": "2"
}
----
{
    "a": 1,
    "x1": "2",
    "x2": "4"  
}
  

Возможно ли что-то подобное?

Ответ №1:

И поскольку b является необязательным, я не могу использовать «minProperties»

Почему бы и нет? Конечно minProperties: 2 , вы получите то, что вам нужно: требуется ‘a’, поэтому требуется одно дополнительное свойство.

Если вам нужно одно дополнительное свойство в дополнение к необязательному свойству ‘b’, вы можете использовать if / then / else :

   "if": {
    "required": [ "b" ]
  },
  "then": {
    "minProperties": 3
  }
  "else": {
    "minProperties": 2
  }