Skip to content

Валидатор JSON Schema

Проверяйте JSON по любой JSON Schema мгновенно в браузере. Поддержка Draft 2020-12, 2019-09 и Draft-07 с точными путями ошибок. 100% приватно — без загрузки, без аккаунта, бесплатно.

Без отслеживания Работает в браузере Бесплатно
Вставьте и данные JSON, и схему
Проверено на соответствие Draft 2020-12, 2019-09 и Draft-07, включая краевые случаи приведения типов, словарь format, разрешение $ref и пути ошибок в JSON Pointer. — Команда инструментов API Go-Tools · May 7, 2026

Что такое валидатор 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. 1

    Вставьте свою JSON Schema

    Вставьте схему в правое поле. Валидатор автоматически определяет draft по URI $schema, если он есть; иначе выберите Draft 2020-12, 2019-09 или Draft-07 на панели инструментов.

  2. 2

    Вставьте свои данные JSON

    Вставьте JSON-документ для проверки в левое поле. Валидация работает по мере ввода; большие входы (>200 КБ) переключаются на ручную кнопку «Валидировать», чтобы ввод оставался отзывчивым.

  3. 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. Схема объявляет типы полей, ключи required, допустимые значения и структурные правила; валидатор обходит оба документа параллельно и сообщает о каждом пути, нарушающем контракт. Это работает на границе между недоверенным входом (запрос API, webhook, файл конфигурации, payload формы) и бизнес-логикой — отлавливает структурные ошибки до того, как они испортят код ниже по потоку. Полные примеры для Node, Python и браузера смотрите в нашем полном руководстве по валидации JSON Schema.
Какие версии JSON Schema поддерживает валидатор?
Draft 2020-12 (по умолчанию и рекомендуется), Draft 2019-09 и Draft-07. Валидатор автоматически определяет версию по URI $schema, если он есть, и иначе использует ваш выбор из выпадающего списка. Для новых проектов в 2026 году берите Draft 2020-12 — именно его OpenAPI 3.1 использует нативно и именно он по умолчанию в Ajv. Draft-07 остаётся распространённым в легаси-кодовых базах (старые конфигурации AJV, Helm charts, настройки VS Code).
Как проверить JSON по схеме?
Вставьте данные JSON в левое поле, а JSON Schema — в правое. Валидатор запускается мгновенно по мере ввода: зелёная галочка — всё валидно, красный список — есть ошибки. Каждая ошибка содержит путь JSON Pointer (например, /user/email), нарушенный keyword (type, required, pattern, minimum) и читаемое сообщение. Кликните по любой ошибке, чтобы перейти к нужной строке. Без загрузки, без регистрации.
Чем валидация JSON Schema отличается от проверки синтаксиса JSON?
Проверка синтаксиса JSON только подтверждает, что документ корректно разбирается — нет лишних запятых, нет пропущенных скобок. Этим занимается форматировщик JSON. Валидация JSON Schema запускается после разбора и проверяет, соответствует ли разобранная структура контракту: присутствуют ли поля required, верны ли типы, в допустимом ли диапазоне значения. Обычно запускают обе проверки — сначала формат, чтобы подтвердить, что документ разбирается, затем валидация по схеме.
Почему моя схема отвергает JSON, который выглядит правильно?
Пять типичных подозреваемых: (1) additionalProperties: false — в данных есть ключ, который схема не объявила, часто опечатка или новое поле; (2) type: "integer" vs "number" — JSON Schema считает 1.0 числом number, а не integer; (3) keyword format (email, uri, uuid) отвергают некорректные строки даже если те выглядят нормально; (4) required не на том уровне вложенности — required должен соседствовать с properties, а не находиться внутри одного из них; (5) в JSON строка "42" там, где схема ожидает integer 42. Путь ошибки укажет, какой именно случай.
Поддерживает ли $ref и удалённые ссылки на схемы?
Внутренние указатели $ref (#/$defs/foo, #/properties/bar) работают «из коробки». Удалённый $ref на внешние URL намеренно отключён — загрузка внешних схем раскрывала бы вашу активность валидации третьим сторонам и ломала бы модель приватности. Чтобы валидировать многофайловую схему, инлайните определения через $defs в один документ или запускайте валидацию у себя в CI на Ajv, где удалённые ссылки уместны.
Что делает additionalProperties: false?
additionalProperties: false отвергает любой ключ, не объявленный в properties. Это самый полезный одиночный keyword для ужесточения контрактов — без него схемы открыты по умолчанию и молча принимают опечатки и вредоносные поля. Всегда ставьте additionalProperties: false на входных контрактах (тела запросов, файлы конфигурации, сообщения очереди). Оставляйте true (или опускайте) только когда схема — частичное описание большего документа.
Как валидировать JSON по схеме в Node.js или Python?
Node: установите Ajv (npm i ajv ajv-formats), вызовите new Ajv().compile(schema), затем validate(data). Python: установите jsonschema (pip install jsonschema), вызовите jsonschema.validate(data, schema). Для TypeScript генерируйте типы из схемы через json-schema-to-typescript, чтобы compile-time и runtime оставались согласованными. Наш гид по валидации JSON Schema содержит готовые рецепты для Node, Python и браузера.
Чем отличаются oneOf, anyOf и allOf?
allOf — должен совпадать с каждой подсхемой (пересечение, для композиции). anyOf — должен совпадать хотя бы с одной (объединение, fast-fail). oneOf — должен совпадать ровно с одной (дискриминированное объединение, медленнее, но строже). Используйте oneOf для дискриминированных объединений вроде событий webhook, тегированных через type; anyOf — для нестрогих объединений; allOf — чтобы расширить базовую схему дополнительными ограничениями. oneOf самый медленный, потому что проверяет каждую ветку — выбирайте anyOf, когда ровно-одна не требуется.
Поддерживает ли схемы OpenAPI?
OpenAPI 3.1 нативно использует Draft 2020-12, поэтому любой компонент схемы OpenAPI 3.1 вставляется напрямую. OpenAPI 3.0 использует подмножество Draft 4, в основном совместимое — могут встретиться граничные случаи вокруг nullable: true (синтаксис 3.0), который в Draft 2020-12 выражается как type: ["string", "null"]. Для полной валидации OpenAPI-документа (paths, operations, security) используйте специализированный OpenAPI-линтер вроде Spectral; этот инструмент сосредоточен на части схемы.
Почему валидатор говорит, что мой JSON Schema сам невалиден?
JSON Schema — это JSON-документ, который должен быть валидным JSON, прежде чем стать валидной схемой. Типичные причины: запятая в конце объекта properties, одинарные кавычки вместо двойных, $schema, указывающий на несуществующий URL draft, или required, перечисленный как строка вместо массива. Сначала отформатируйте схему в форматировщике JSON, чтобы выявить синтаксические проблемы, потом вставьте её обратно сюда для семантической валидации.
Отправляет ли инструмент мой JSON или схему на сервер?
Нет. Весь разбор и валидация выполняются локально в браузере. Ваш JSON, схема и результаты валидации никогда не покидают вашу машину — без загрузки, без сохранения ввода в localStorage, без аналитики того, что вы вставляете. Безопасно для проприетарных API-контрактов, внутренних файлов конфигурации и чувствительных payload. В localStorage сохраняется только выбор draft, чтобы он пережил обновление страницы; очистите данные браузера, чтобы стереть его.
Можно ли валидировать JSON Lines (NDJSON) или несколько документов?
Этот инструмент валидирует один документ за запуск. Для JSON Lines проверяйте каждую строку отдельно или используйте Ajv в Node со схемой и потоковым парсером вроде JSONStream. Для пакетной валидации больших датасетов выбирайте командную строку — ajv-cli или check-jsonschema (Python) обрабатывают тысячи файлов в секунду при единой компиляции схемы.

Похожие инструменты

Все инструменты →

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% приватно, данные не отправляются на сервер.