Схема JSON в draftv3

Запрос:

{
  "PersonSearch":
  {
    "LastName": "Doe",
    "Gender":"Male",
    "State" : "FL"
   }
}

или же

{
  "PersonSearch":
   {
    "FirstName": "John",
    "Gender":"Male",
    "State" : "FL"
   }
}

Что такое схема JSON, что я могу проверить оба запроса. Он должен быть совместим с drraftV3.

1 ответ

Ваши требования, кажется, что вам нужно либо "FirstName" или же "LastName", правильный?

Нет способа указать одну схему, которая работает как для v4, так и для v3, из-за некоторых фундаментальных изменений в спецификации: в v4 type может содержать только строку (или массив строк). Не разрешается использовать схемы внутри type,

Вы должны избегать использования v3, если это возможно, и перейти к v4.

Метод v4:

В этом случае вам нужно будет использовать anyOf для этого конкретного ограничения:

{
    "type": "object",
    "anyOf": [
        {"required": ["FirstName"]},
        {"required": ["LastName"]}
    ],
    "properties": {...}
}

v3

В синтаксисе v3 вы используете type вместо anyOf (также, required является логическим)

{
    "type": [
        {
            "type": "object",
            "properties": {
                "FirstName": {"required": true}
            }
        },
        {
            "type": "object",
            "properties": {
                "LastName": {"required": true}
            }
        }
    ],
    "properties": {...}
}

преобразование v3 -> v4

Если вы застряли со смесью схем v3/v4, этот инструмент (json-schema-compatibility) нормализует схемы (v3 или v4) в синтаксис v4.

Если вы работаете в JavaScript, вы можете запустить схемы с помощью инструмента совместимости, прежде чем использовать их. Затем вы можете использовать чисто v4-инструменты для фактической проверки / чего угодно.

Другие вопросы по тегам