Валидатор 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