Построение схемы JSON Schema по примеру JSON: типы, обязательные поля, форматы, версии draft-04, 07, 2019-09 и 2020-12.
Данные обрабатываются в браузере и никуда не отправляются
Здесь появится результат
Введите данные слева - результат появится сразу
Вставьте пример JSON - схема появляется сразу. Типы определяются по значениям (целое число отличается от дробного), поля объектов в массиве сливаются, а обязательными считаются поля, которые есть во всех объектах примера. Строки с датами, адресами почты, UUID и ссылками получают формат (format). Выберите версию схемы, а чтобы схема запрещала лишние поля, включите «Лишние поля: запрещены».
Схема строится по тому, что есть в примере, поэтому чем больше разных записей вы вставите, тем точнее она получится: по одному объекту нельзя понять, какие поля необязательные, а какие значения бывают null.
Вот что чаще всего упускают при создании схемы из примера:
Один пример - все поля обязательные
Если в примере один объект, схема считает все его поля обязательными. Добавьте в массив несколько записей, в том числе с пропущенными полями, - тогда обязательными останутся только общие.
Пустые массивы и null
Пустой массив ничего не говорит о типе элементов, а null - о типе значения. Инструмент предупреждает об этом: добавьте в пример заполненный массив и реальное значение.
Числа: целое или дробное
Значение 5 даёт integer, а 5.0 в JSON после разбора тоже целое. Если поле бывает дробным, вставьте в пример хотя бы одно дробное значение - тогда тип станет number.
Формат определяется по значениям
Формат (date, email, uuid, uri...) указывается, только если ему соответствуют все значения поля в примере. Одна строка «не по формату» - и формата в схеме не будет.
Схема не знает смысла полей
Инструмент не добавляет ограничения вроде minLength или enum и не пишет описания: их нужно дополнить вручную, например по документации API.
Лишние поля по умолчанию разрешены
JSON Schema по умолчанию принимает любые дополнительные поля. Чтобы схема их отвергала, включите запрет - в схему добавится additionalProperties: false.
Нет - 100%. Сайт целиком статический, у него нет серверной части. Разбор и построение выполняются в вашем браузере, образцы данных никуда не передаются.
draft-04, draft-07, 2019-09 и 2020-12: отличается идентификатор версии ($schema). Построенная схема использует ключевые слова, одинаково понятные всем версиям, поэтому проверяется любой из них. Проверить результат можно валидатором JSON Schema на этом сайте.
Схема из примера описывает форму конкретных данных, а не правила предметной области: она не знает допустимых диапазонов и перечислений. Это хорошая заготовка, которую затем уточняют.
Режим «Общие для всех» (по умолчанию) делает обязательными поля, которые есть в каждом объекте примера. «Все» - любое поле, встретившееся хотя бы раз. «Никакие» - ничего не требует.
К простым полям добавляется ключевое слово examples с реальным значением из примера. Это удобно для документации, а валидацию не меняет (в draft-04 слово не используется и игнорируется).
Если в массиве поле иногда строка, иногда число или null, схема получает список типов, например ["integer", "null"], и приходит предупреждение. Проверьте, что так и задумано.
REST, gRPC, SOAP, GraphQL и JSON-RPC, архитектурные подходы, SQL и NoSQL, брокеры сообщений и работа с ИИ. Программа курса помогает систематизировать знания об API и интеграциях; содержание и условия обучения смотрите на Stepik.