ToolDeck

JSON Schema Validator

Валидация JSON-данных по JSON Schema (Draft 7)

Попробовать пример

Данные JSON

JSON Schema

Работает локально · Безопасно вставлять секреты
Работает локально · Безопасно вставлять секреты

Что такое валидация по JSON Schema?

Валидация по JSON Schema — это процесс проверки соответствия JSON-документа набору структурных и ценностных ограничений, описанных в JSON Schema. Сама схема является JSON-документом, который определяет ожидаемую форму данных: какие поля обязательны, каковы их типы, допустимые диапазоны чисел, паттерны строк, длины массивов и многое другое. Спецификация JSON Schema поддерживается на json-schema.org и публикуется в виде серии черновиков IETF; наиболее широко применяются Draft 7 и Draft 2020-12.

Простая валидация JSON проверяет лишь синтаксис — закрыты ли скобки, заключены ли строки в кавычки. Валидация по схеме идёт дальше. Она отвечает на вопросы: содержит ли ответ этого API поле "id", которое всегда является целым числом? Является ли значение поля "status" одним из трёх допустимых вариантов? Правильно ли структурированы вложенные объекты? Такая структурная проверка выявляет ошибки, которые синтаксическая проверка полностью упускает, — ведь синтаксически корректный JSON может быть семантически неверным для вашего приложения.

JSON Schema используется в определениях OpenAPI/Swagger, валидации конфигурационных файлов, проверке форм, ограничениях документов в базах данных и автоматизированном тестировании. Такие инструменты, как Ajv (JavaScript), jsonschema (Python) и check-jsonschema (CLI), реализуют спецификацию для программной валидации данных. Этот онлайн-валидатор позволяет вставить схему и документ с данными и мгновенно проверить соответствие без установки каких-либо библиотек.

Зачем использовать онлайн JSON Schema Validator?

Создание схем и отладка ошибок валидации вручную — занятие медленное. Онлайн JSON Schema Validator даёт мгновенную обратную связь: соответствуют ли ваши данные схеме, с чёткими сообщениями об ошибках, указывающими на конкретное проблемное поле.

Мгновенная обратная связь при валидации
Вставьте схему и данные — и сразу увидите результаты. Каждая ошибка показывает JSON-путь и конкретное нарушенное ограничение, что позволяет устранять проблемы без разбора вывода библиотеки-валидатора.
🔒
Конфиденциальность: обработка только в браузере
Ваши JSON-данные никогда не покидают браузер. Вся валидация выполняется локально в JavaScript. Никакого сервера, никаких логов, никакого хранения данных. Безопасно для схем, описывающих внутренние API или содержащих проприетарные имена полей.
🎯
Поддержка ключевых слов Draft 7
Валидатор поддерживает ключевые слова Draft 7: type, required, properties, enum, pattern, minimum/maximum, items, anyOf, oneOf, allOf и additionalProperties. Протестируйте схему здесь, прежде чем встраивать её в пайплайн сборки или набор тестов.
📋
Без регистрации и установки
Откройте страницу, вставьте JSON и выполните валидацию. Никаких npm install, pip-пакетов или Docker-образов. Удобно для быстрой проверки схемы на машине, где нельзя установить инструменты разработки.

Сценарии использования JSON Schema Validator

Тестирование контрактов API
Валидируйте ответы API по схеме, определённой в вашей OpenAPI-спецификации. Обнаруживайте критические изменения — например, смену типа поля с integer на string — до попадания в продакшн.
Верификация конфигурационных файлов
Проверяйте, что JSON-конфиги для CI/CD пайплайнов, Kubernetes-манифестов или настроек приложения соответствуют ожидаемой схеме перед коммитом. Предотвращает сбои деплоя из-за отсутствующих или ошибочно введённых ключей.
Шлюзы в DevOps-пайплайнах
Добавьте валидацию по схеме как шаг CI для отклонения данных, нарушающих контракт. Работает для файлов переменных Terraform, входных данных GitHub Actions или любого структурированного JSON, потребляемого автоматизацией.
QA и проверка тестовых данных
Убедитесь, что тестовые фикстуры и файлы с моковыми данными соответствуют той же схеме, которую ожидает приложение. Несоответствие тестовых данных — распространённая причина ложноположительных результатов тестов.
Приём данных в пайплайн
Валидируйте входящие JSON-записи на границе пайплайна данных. Валидация по схеме отфильтровывает некорректные события до их попадания в хранилище данных, снижая затраты на последующую очистку.
Изучение синтаксиса JSON Schema
Экспериментируйте с ключевыми словами схемы интерактивно. Напишите схему, вставьте тестовые данные и посмотрите, какие ограничения выполняются, а какие нет. Быстрее, чем каждый раз писать скрипт и запускать его из терминала.

Справочник по ключевым словам JSON Schema

JSON Schema строится из ключевых слов, каждое из которых накладывает ограничение на проверяемые данные. В таблице ниже перечислены наиболее часто используемые ключевые слова в Draft 7 и более поздних версиях. Любое ключевое слово можно комбинировать с другими в одном объекте схемы.

Ключевое словоНазначениеПример
typeRestricts the data type"type": "string"
propertiesDefines expected object keys and their schemas"properties": { "name": { "type": "string" } }
requiredLists mandatory properties"required": ["id", "name"]
itemsSchema for array elements"items": { "type": "number" }
enumRestricts value to a fixed set"enum": ["active", "inactive"]
patternRegex constraint on strings"pattern": "^[A-Z]{2}\\d{4}$"
minimum / maximumNumeric range bounds"minimum": 0, "maximum": 100
minLength / maxLengthString length bounds"minLength": 1, "maxLength": 255
$refReuses another schema by URI"$ref": "#/$defs/address"
additionalPropertiesControls extra keys in objects"additionalProperties": false
anyOf / oneOf / allOfCombines multiple schemas logically"anyOf": [{ "type": "string" }, { "type": "null" }]
if / then / elseConditional schema application"if": { "properties": { "type": { "const": "email" } } }

Сравнение черновиков JSON Schema: Draft 7 vs 2019-09 vs 2020-12

JSON Schema прошла через несколько версий черновиков. Draft 7 (опубликован в 2018 году) имеет наибольшую поддержку среди инструментов. Draft 2019-09 ввёл $defs (на замену definitions), unevaluatedProperties и $recursiveRef. Draft 2020-12 (последний стабильный выпуск) заменил $recursiveRef на $dynamicRef и добавил prefixItems для валидации кортежей. При выборе черновика проверьте, поддерживает ли его ваша библиотека валидации. Ajv поддерживает все три черновика. Библиотека jsonschema для Python поддерживает Draft 2020-12 начиная с версии 4.0.

ВозможностьDraft 7Draft 2019-09Draft 2020-12
$schema URIdraft-07/schema#2019-09/schema2020-12/schema
if / then / elseYesYesYes
$defs (definitions)definitions$defs$defs
$ref alongside keysNo (sibling ignored)YesYes
$dynamicRefNoNo ($recursiveRef)Yes
prefixItemsNo (use items array)No (use items array)Yes
unevaluatedPropertiesNoYesYes
$vocabularyNoYesYes

Примеры кода

Эти примеры показывают, как программно валидировать JSON по схеме. Каждый использует хорошо поддерживаемую библиотеку для соответствующей экосистемы.

JavaScript (Ajv)
import Ajv from 'ajv';

const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string', minLength: 1 },
    age: { type: 'integer', minimum: 0 },
    email: { type: 'string', format: 'email' }
  },
  required: ['name', 'email'],
  additionalProperties: false
};

const data = { name: 'Alice', age: 30, email: 'alice@example.com' };

const validate = ajv.compile(schema);
const valid = validate(data);
console.log(valid);          // → true
console.log(validate.errors); // → null

// Invalid data — missing required "email"
validate({ name: 'Bob', age: 25 });
console.log(validate.errors);
// → [{ instancePath: '', keyword: 'required', params: { missingProperty: 'email' } }]
Python (jsonschema)
from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "minLength": 1},
        "age": {"type": "integer", "minimum": 0},
        "tags": {
            "type": "array",
            "items": {"type": "string"},
            "uniqueItems": True
        }
    },
    "required": ["name"]
}

# Valid data
validate(instance={"name": "Alice", "age": 30, "tags": ["admin"]}, schema=schema)
# → No exception raised

# Invalid data — wrong type for "age"
try:
    validate(instance={"name": "Alice", "age": "thirty"}, schema=schema)
except ValidationError as e:
    print(e.message)
    # → 'thirty' is not of type 'integer'
    print(e.json_path)
    # → $.age
Go (santhosh-tekuri/jsonschema)
package main

import (
    "fmt"
    "strings"
    "github.com/santhosh-tekuri/jsonschema/v5"
)

func main() {
    schemaJSON := `{
        "type": "object",
        "properties": {
            "id": { "type": "integer" },
            "status": { "enum": ["active", "inactive"] }
        },
        "required": ["id", "status"]
    }`

    compiler := jsonschema.NewCompiler()
    compiler.AddResource("schema.json", strings.NewReader(schemaJSON))
    schema, _ := compiler.Compile("schema.json")

    // Valid data
    data := map[string]interface{}{"id": 1, "status": "active"}
    err := schema.Validate(data)
    fmt.Println(err) // → <nil>

    // Invalid — missing "status"
    bad := map[string]interface{}{"id": 2}
    err = schema.Validate(bad)
    fmt.Println(err) // → validation failed: missing properties: 'status'
}
CLI (check-jsonschema)
# Install via pip
pip install check-jsonschema

# Validate a file against a schema
check-jsonschema --schemafile schema.json data.json
# → ok -- validation done

# Validate against a remote schema (e.g., GitHub Actions workflow)
check-jsonschema --builtin-schema vendor.github-workflows my-workflow.yml

# Validate multiple files at once
check-jsonschema --schemafile schema.json file1.json file2.json file3.json

Часто задаваемые вопросы

В чём разница между валидацией JSON и валидацией по JSON Schema?
Валидация JSON проверяет, является ли строка корректным JSON-синтаксисом: правильно ли вложены скобки, заключены ли ключи в кавычки, нет ли завершающих запятых. Валидация по JSON Schema идёт дальше и проверяет, соответствуют ли распарсенные JSON-данные структурному контракту: правильны ли типы, присутствуют ли обязательные поля, находятся ли значения в допустимых диапазонах. Для применения схемы сначала нужен валидный JSON, но валидный JSON всё равно может не пройти валидацию по схеме.
Какой черновик JSON Schema выбрать?
Draft 7 — наиболее безопасный вариант по умолчанию. Он имеет наибольшую поддержку библиотек во всех языках и охватывает ключевые слова, необходимые большинству проектов: type, properties, required, enum, pattern, anyOf, oneOf, allOf и $ref. Используйте Draft 2020-12, если вам нужны такие возможности, как prefixItems для валидации кортежей, $dynamicRef для расширяемых схем или unevaluatedProperties для строгих форм объектов. Перед переходом на новый черновик проверьте документацию вашей библиотеки-валидатора.
Как работает $ref в JSON Schema?
Ключевое слово $ref позволяет ссылаться на другую схему по URI вместо её дублирования. Значение вида "$ref": "#/$defs/address" указывает на схему, определённую в секции $defs того же документа. Также можно ссылаться на внешние файлы: "$ref": "https://example.com/schemas/address.json". В Draft 7 $ref заменяет все соседние ключевые слова в том же объекте. В Draft 2019-09 и более поздних версиях соседние ключевые слова применяются вместе с $ref.
В чём разница между anyOf, oneOf и allOf?
allOf требует, чтобы данные соответствовали каждой из подсхем в массиве. anyOf требует соответствия хотя бы одной подсхеме. oneOf требует соответствия ровно одной подсхеме и завершается ошибкой, если данные соответствуют нулю или более чем одной. Для полей, допускающих null, часто используют anyOf с типом и null: {"anyOf": [{"type": "string"}, {"type": "null"}]}. Используйте oneOf, когда подсхемы взаимоисключающие, например, для помеченных объединений.
Может ли JSON Schema валидировать вложенные объекты и массивы?
Да. Используйте ключевое слово properties для определения схем вложенных ключей объекта и ключевое слово items для определения схемы, которой должен соответствовать каждый элемент массива. Вложенность возможна на любую глубину. Для массивов, где каждая позиция имеет свою схему (кортежи), используйте prefixItems в Draft 2020-12 или форму массива items в Draft 7.
Передаются ли данные, вставленные в этот инструмент, на сервер?
Нет. Валидатор работает полностью в вашем браузере с использованием JavaScript. JSON-данные и схема никогда не передаются на какой-либо сервер. Это можно проверить, открыв инспектор сети браузера во время работы с инструментом.
Как валидировать JSON Schema в CI/CD пайплайне?
Используйте CLI-валидатор — check-jsonschema (Python/pip) или ajv-cli (Node.js/npm). Оба принимают файл схемы и один или несколько файлов с данными в качестве аргументов. Добавьте команду валидации как шаг в конфигурацию CI. При неудачной валидации процесс завершается с ненулевым кодом, что блокирует пайплайн. Для GitHub Actions можно также использовать действие check-jsonschema напрямую.