Валидатор JSON Schema
Проверяйте JSON по любой JSON Schema мгновенно в браузере. Поддержка Draft 2020-12, 2019-09 и Draft-07 с точными путями ошибок. 100% приватно — без загрузки, без аккаунта, бесплатно.
Что такое валидатор JSON Schema?
Валидатор JSON Schema — программа, которая берёт два JSON-документа (документ данных и документ схемы) и сообщает, соответствуют ли данные контракту схемы. Схема объявляет типы полей, ключи required, диапазоны значений, допустимые значения enum, regex-паттерны и структурные правила, используя фиксированный словарь (type, properties, required, items, enum, oneOf, allOf, $ref, format). Валидатор параллельно обходит оба документа и выдаёт ноль или больше ошибок, каждая привязана к пути JSON Pointer внутри данных.
Валидация работает в runtime, на границе между недоверенным входом и вашим кодом. Типы TypeScript исчезают на этапе компиляции и не помогут с JSON, прилетающим из webhook, стороннего API или вставки пользователя — этот разрыв и закрывает JSON Schema. В паре с TypeScript (или Pydantic в Python) получите гарантии compile-time внутри кодовой базы плюс гарантии runtime на границе.
Draft 2020-12 — текущая спецификация и то, что стоит выбирать для новых проектов в 2026 году. Более ранние drafts (2019-09, Draft-07, Draft-06, Draft-04) живы в легаси-кодовых базах — Draft-07 всё ещё распространён в Helm charts, настройках VS Code и старых конфигурациях Ajv. OpenAPI 3.1 использует Draft 2020-12 нативно; OpenAPI 3.0 — подмножество Draft 4.
Этот инструмент работает целиком в браузере. Ваш JSON, схема и вывод валидации никогда не покидают машину — безопасно для проприетарных API-контрактов и чувствительных payload. Внутренние указатели $ref разрешаются автоматически; внешние HTTP-ссылки намеренно отключены ради приватности.
Работаете с соседними JSON-инструментами? Форматируйте JSON в форматировщике JSON перед вставкой; сравнивайте два JSON-документа в JSON Diff; конвертируйте через JSON в YAML и YAML в JSON. Сквозную валидацию для Node, Python и браузера смотрите в нашем гиде по валидации JSON Schema.
// A 5-line schema that catches three real bugs
const schema = {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": { "type": "integer", "minimum": 1 },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 0, "maximum": 150 }
},
"required": ["id", "email"],
"additionalProperties": false
};
// Three bugs the schema catches:
const bad = { "id": "42", "age": 200 };
// /id → type: expected integer, got string
// /email → required: missing
// /age → maximum: 200 > 150
// In Node: new Ajv().compile(schema)(bad) // false; ajv.errors has the paths
// In Python: jsonschema.validate(bad, schema)
// In the browser: this tool — same errors, same paths, no install Ключевые возможности
Поддержка нескольких draft
Draft 2020-12 (по умолчанию), 2019-09 и Draft-07. Авто-определение по URI $schema; ручной селектор для схем без него.
Точные пути ошибок
Каждая ошибка включает JSON Pointer (например, /user/email/0), нарушенный keyword (type, required, pattern) и однострочное сообщение. Кликните, чтобы перейти к месту.
Live-валидация
Проверяет по мере ввода. Ошибки обновляются в реальном времени, чтобы вы итерировали по схеме или данным без круга через кнопки «Валидировать».
Покрытие keyword format
email, uri, uuid, date, date-time, ipv4, ipv6, hostname, regex — те форматы, которые вы реально используете, проверены боевыми паттернами.
100% в браузере
Входы не покидают машину. Без загрузки, без аналитики того, что вы вставляете, без localStorage для JSON. Безопасно для проприетарных контрактов и чувствительных payload.
Готовые схемы в один клик
Загружаемые пресеты (форма регистрации, конверт webhook, файл конфигурации, массив заказов) приводят к рабочей валидации меньше чем за пять секунд.
Примеры
Корректный объект — required + типы
{
"id": 42,
"email": "alice@example.com",
"age": 30
} {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": { "type": "integer", "minimum": 1 },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 0, "maximum": 150 }
},
"required": ["id", "email"],
"additionalProperties": false
} Схема объявляет id и email как required и фиксирует типы. Данные выше проходят проверку — каждое ограничение выполнено. Удалите email или замените id на строку, чтобы увидеть точные пути ошибок.
Невалидно — пропущен required + неверный тип
{
"id": "42",
"age": 200
} {
"type": "object",
"properties": {
"id": { "type": "integer" },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "maximum": 150 }
},
"required": ["id", "email"]
} Три ошибки: /id — строка, а не integer; /email отсутствует; /age (200) превышает maximum 150. Каждая ошибка содержит точный путь JSON Pointer, поэтому исправляете данные — или ослабляете схему — без догадок.
Дискриминированное объединение — oneOf с const
{
"type": "order.created",
"data": { "orderId": "ORD-001234", "totalUsd": 49.99 }
} {
"oneOf": [
{
"properties": {
"type": { "const": "order.created" },
"data": {
"type": "object",
"properties": {
"orderId": { "type": "string", "pattern": "^ORD-[0-9]{6}$" },
"totalUsd": { "type": "number", "minimum": 0 }
},
"required": ["orderId", "totalUsd"]
}
},
"required": ["type", "data"]
},
{
"properties": {
"type": { "const": "order.refunded" },
"data": { "type": "object", "required": ["refundId"] }
},
"required": ["type", "data"]
}
]
} Валидация конверта webhook. Первая ветка oneOf совпадает, потому что type равен "order.created". Поменяйте type на "order.refunded" или сломайте паттерн orderId, чтобы увидеть, как oneOf сообщает об отказах по каждой ветке.
Массив объектов — items + uniqueItems
[
{ "sku": "A1", "qty": 3 },
{ "sku": "B2", "qty": 5 },
{ "sku": "A1", "qty": 3 }
] {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "object",
"properties": {
"sku": { "type": "string", "pattern": "^[A-Z][0-9]+$" },
"qty": { "type": "integer", "minimum": 1 }
},
"required": ["sku", "qty"]
}
} Два элемента побайтово идентичны, поэтому uniqueItems срабатывает. Элементы 0 и 2 коллидируют — валидатор сообщает о дубликате в корне массива. Полезно для выявления дублей строк корзины и багов слияния в заявках на доставку.
Как использовать
- 1
Вставьте свою JSON Schema
Вставьте схему в правое поле. Валидатор автоматически определяет draft по URI $schema, если он есть; иначе выберите Draft 2020-12, 2019-09 или Draft-07 на панели инструментов.
- 2
Вставьте свои данные JSON
Вставьте JSON-документ для проверки в левое поле. Валидация работает по мере ввода; большие входы (>200 КБ) переключаются на ручную кнопку «Валидировать», чтобы ввод оставался отзывчивым.
- 3
Прочитайте список ошибок
Каждая ошибка содержит путь JSON Pointer, keyword и однострочное сообщение. Кликните по ошибке, чтобы перейти к месту в данных, исправьте — и наблюдайте, как счётчик уменьшается в реальном времени.
Типичные ловушки JSON Schema
Type: integer vs number
JSON Schema считает 1.0 числом number, но не integer. Если контракт говорит integer, валидатор отвергает 1.0 — даже если большинство языков считают это равным 1. Берите number, кроме случаев, когда integer действительно нужен.
{ "qty": 1.0 } schema: { "type": "integer" } → error: not an integer { "qty": 1 } schema: { "type": "integer" } → valid required не на том уровне вложенности
required должен соседствовать с properties, а не находиться внутри одного из них. Массив required внутри объявления свойства молча игнорируется — валидатор никогда его не применяет.
{ "properties": { "name": { "type": "string", "required": true } } } { "properties": { "name": { "type": "string" } }, "required": ["name"] } additionalProperties по умолчанию true
Без additionalProperties: false схема открыта — любой лишний ключ проходит. Забыть об этом — самая частая причина того, что схемы «принимают всё».
{ "properties": { "id": { "type": "integer" } } } accepts: { "id": 1, "foo": "bar", "x": null } { "properties": { "id": { "type": "integer" } }, "additionalProperties": false } OpenAPI 3.0 nullable vs Draft 2020-12 type-массив
OpenAPI 3.0 использует nullable: true; Draft 2020-12 — type: ["string", "null"]. Их смешение даёт схемы, которые выглядят правильно, но никогда фактически не разрешают null.
{ "type": "string", "nullable": true } in 2020-12: nullable is just an unknown keyword { "type": ["string", "null"] } in 2020-12: explicitly allows null Pattern без якорей
Regex JSON Schema по умолчанию ищет совпадение где угодно — pattern: "^[A-Z]+$" привязывается ко всей строке, а pattern: "[A-Z]+" совпадает, если хоть где-нибудь есть заглавная буква.
pattern: "[A-Z]+" accepts: "helloX" (because X matches)
pattern: "^[A-Z]+$" accepts only: "HELLO"
oneOf там, где имелось в виду anyOf
oneOf требует совпадения ровно с одной веткой. Если две ветки принимают одну и ту же форму, oneOf падает на данных, которые anyOf пропустил бы — а сообщение об ошибке путает («matches more than one»).
oneOf: [ { type: "string" }, { type: "string", maxLength: 10 } ] on: "hi" → error: matches both anyOf: [ { type: "string" }, { type: "string", maxLength: 10 } ] on: "hi" → valid Типичные сценарии
- Валидация API-запросов
- Вставьте тело запроса и схему вашего endpoint перед деплоем. Поймайте ответы 400, которые не покрыли тесты, — пропущенные required, неверные типы, числа вне диапазона.
- Проверка payload webhook
- Вендор прислал payload, который ваш handler отвергает? Проверьте реальный payload по своей схеме, потом по опубликованной схеме вендора. Diff между ними — ваш баг.
- Линтинг файлов конфигурации
- package.json, tsconfig.json, helm values.yaml — у каждого файла конфигурации есть публичная схема. Вставьте схему, вставьте конфигурацию, найдите опечатку. Пропустите метод проб и ошибок.
- Тестирование компонентов OpenAPI
- Вытащите компонент схемы из документа OpenAPI 3.1, вставьте сюда, проверьте примеры payload. Быстрее, чем поднимать mock-сервер; детерминировано, без SDK.
- Предварительная проверка отправки формы
- Вставьте пример payload формы до того, как подключите валидацию на фронте. Подтвердите, что схема отвергает то, что должна, и принимает то, что должна, потом отправьте ту же схему на клиент и сервер.
- Проверка контракта в data-pipeline
- ETL-вывод поплыл? Вставьте пример строки и нижестоящую схему. Укажите, какой producer изменился и какие ключи сломались, до того как pipeline переотыграет 10 000 записей.
Технические детали
- Соответствие Draft 2020-12
- Реализует опубликованную спецификацию Draft 2020-12 — набор keyword, систему типов, словарь format. Перепроверено против вывода Ajv 8.x и ajv-formats.
- Пути ошибок в JSON Pointer
- Ошибки используют JSON Pointer по RFC 6901 (/user/email/0). Каждое нарушение keyword указывает на единственную разрешимую позицию в данных — без неоднозначности, без поиска по строке.
- Разрешение внутренних $ref
- Разрешает указатели $ref внутри одного документа (#/$defs/foo, #/properties/bar). Циклы обнаруживаются и сообщаются. Внешние HTTP $ref отключены ради приватности.
Лучшие практики
- Всегда задавайте additionalProperties: false
- На входных контрактах (тела запросов, файлы конфигурации, сообщения очереди) неизвестные ключи — обычно баги: опечатки, случайные поля или зондирование атакующего. Отвергайте их по умолчанию.
- Используйте $defs для переиспользуемых подсхем
- Дублируйте одну и ту же форму дважды — и они разойдутся. Перенесите общие определения в $defs и ссылайтесь через $ref — единый источник истины, любое изменение применяется везде.
- Валидируйте до бизнес-логики
- Запускайте валидацию схемы сразу после JSON.parse, до того как трогать разобранную структуру. Сужение типов, проставление значений по умолчанию и сохранение полагаются на то, что контракт держится — убедитесь, что это так.
Часто задаваемые вопросы
Что такое валидация JSON Schema?
Какие версии JSON Schema поддерживает валидатор?
Как проверить JSON по схеме?
Чем валидация JSON Schema отличается от проверки синтаксиса JSON?
Почему моя схема отвергает JSON, который выглядит правильно?
Поддерживает ли $ref и удалённые ссылки на схемы?
Что делает additionalProperties: false?
Как валидировать JSON по схеме в Node.js или Python?
Чем отличаются oneOf, anyOf и allOf?
Поддерживает ли схемы OpenAPI?
Почему валидатор говорит, что мой JSON Schema сам невалиден?
Отправляет ли инструмент мой JSON или схему на сервер?
Можно ли валидировать JSON Lines (NDJSON) или несколько документов?
Похожие инструменты
Все инструменты →Base64 декодер и кодировщик
Кодирование и форматирование
Декодирование и кодирование Base64 онлайн бесплатно. Преобразование в реальном времени с полной поддержкой UTF-8 и эмодзи. Полная приватность — работает в браузере. Без регистрации.
JSON Diff и сравнение
Кодирование и форматирование
Сравнивайте два JSON-файла мгновенно в браузере. Side-by-side подсветка, вывод JSON Patch (RFC 6902), игнорирование шума вроде timestamp и ID. 100% приватно, без загрузки.
Форматировщик и валидатор JSON
Кодирование и форматирование
Форматирование, проверка и улучшение читаемости JSON прямо в браузере. Бесплатный онлайн-инструмент с проверкой синтаксиса, поиском ошибок, минификацией и копированием в один клик. Полная приватность.
Конвертер JSON в YAML
Кодирование и форматирование
Вставьте JSON, получите YAML мгновенно. Live-конвертация в браузере. Готово для K8s/Compose, отступ 2/4 пробела, умное экранирование. 100% приватно, без загрузки.
Генератор QR-кодов — URL, WiFi, vCard, Email, SMS, Geo
Кодирование и форматирование
Бесплатный генератор QR-кодов. Создавайте статические QR для URL, WiFi, vCard, email и SMS. Скачивание SVG и PNG. Без срока действия, без регистрации, 100% в браузере.
URL кодировщик и декодер с парсером URL
Кодирование и форматирование
Декодирование и кодирование URL в реальном времени со встроенным парсером URL. Два режима: encodeURI и encodeURIComponent. 100% приватно, данные не отправляются на сервер.