Валидатор JSON Schema
Проверка JSON по схеме JSON Schema (draft-04, 07, 2019-09, 2020-12): все ошибки сразу, на русском и со строкой в данных.
Данные обрабатываются в браузере и никуда не отправляются
Данные (JSON)
Схема (JSON Schema)
Как пользоваться
Вставьте данные слева и схему справа (или откройте пример) и нажмите «Проверить». Инструмент найдёт все несоответствия сразу, а не только первое: у каждой ошибки есть путь к значению (например, $.items[0].price), понятное описание и номер строки в данных, по клику курсор переходит к месту ошибки. Если сломана сама схема или данные не разбираются как JSON, ошибка с позицией покажется возле нужного поля.
Версия схемы определяется по полю $schema (draft-04, draft-06, draft-07, 2019-09, 2020-12); без него берётся draft-07 - самая распространённая в API. Вручную версию можно выбрать в панели над полями. Проверка форматов (email, date, uri, uuid, ipv4 и других) включена по умолчанию - её можно выключить, если схема использует format только как подсказку.
Частые ошибки
Вот что чаще всего удивляет при проверке по JSON Schema:
Лишние поля - не ошибка
По умолчанию схема разрешает любые дополнительные поля. Чтобы лишнее поле считалось ошибкой, нужно явно написать "additionalProperties": false (в 2019-09 и 2020-12 для сложных схем с allOf - unevaluatedProperties).
required - список в объекте, а не флаг в поле
Обязательные поля перечисляются массивом рядом с properties: "required": ["id", "name"]. Запись "required": true внутри описания поля - это старый draft-03, современные версии её не понимают.
Число и строка с числом - разные типы
Значение "399" в кавычках - строка, и "type": "number" его не примет. Это частая причина ошибок при интеграции: одна система присылает числа строками, другая ждёт числа.
pattern ищет совпадение внутри строки
Шаблон "[0-9]+" подойдёт и строке "abc123def", потому что JSON Schema ищет подстроку. Чтобы проверить строку целиком, ставьте якоря: "^[0-9]+$".
format без проверки ничего не проверяет
По стандарту format - лишь аннотация, и многие валидаторы её игнорируют. Здесь проверка форматов включена, поэтому "email", "date" или "uuid" действительно проверяются - но на вашем сервере всё может быть иначе, сверяйтесь с его библиотекой.
Ссылки $ref на внешние адреса не работают
Инструмент не ходит в сеть, поэтому "$ref": "https://..." разрешить не может. Перенесите нужные определения в "$defs" (или "definitions" в draft-07) и ссылайтесь на них: "#/$defs/имя".
Разные версии - разные ключевые слова
В draft-07 массив фиксированной длины описывается через items-массив, а в 2020-12 - через prefixItems; dependencies разделились на dependentRequired и dependentSchemas; exclusiveMinimum в draft-04 - булево, а позже - число. Если схема ведёт себя странно, проверьте, по какой версии она проверяется.
Частые вопросы
Отправляются ли мои данные или схема на сервер?
Нет - 100%. Сайт целиком статический, у него нет серверной части, которая могла бы принять данные. Проверка выполняется в вашем браузере, поэтому можно вставлять и рабочие документы.
Какие версии JSON Schema поддерживаются?
draft-04, draft-06 (проверяется как draft-07, они совместимы), draft-07, 2019-09 и 2020-12. Версию можно задать полем $schema в самой схеме или выбрать вручную. Проверка выполняется библиотекой Ajv.
Почему не работает $ref на другую схему по URL?
Страница не загружает ничего из сети - в этом и смысл «данные никуда не уходят». Скопируйте нужное определение в раздел $defs своей схемы и ссылайтесь на него как #/$defs/имя.
Какие форматы проверяются?
date, time, date-time, duration, email, hostname, ipv4, ipv6, uri, uri-reference, uuid, json-pointer, regex и другие стандартные форматы. Свои форматы (например, "phone") не проверяются и не считаются ошибкой.
Сколько ошибок показывается и какой размер файла допустим?
Показываются первые 100 ошибок - остальное свёрнуто в счётчик. Файл можно загрузить размером до 5 МБ, вложенность JSON - до 1000 уровней.
Можно ли дать ссылку на готовый пример?
Да, добавьте к адресу страницы параметр ?example=order или ?example=order-error - откроется страница с данными и схемой из примера.
Похожие инструменты
Курс «Проектирование API и интеграций»
Глубокое погружение в REST, gRPC, SOAP, проектирование баз данных и брокеры сообщений (Kafka, RabbitMQ). Делегирование рутины нейросетям (ИИ). Перестанете бояться технических собеседований и начнете говорить с разработчиками на одном языке. Курс собран так, чтобы пробить зарплатный потолок и вырасти в грейде - ученики тому подтверждение.
Перейти к курсу на Stepik