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?

Писати схеми й налагоджувати помилки валідації вручну — повільно. Онлайн-валідатор JSON Schema надає миттєвий зворотний зв'язок щодо відповідності ваших даних схемі, із чіткими повідомленнями про помилки, що вказують на конкретну властивість, яка не пройшла перевірку.

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

Сценарії використання валідації JSON Schema

Тестування API-контрактів
Перевіряйте відповіді API відповідно до схеми, визначеної у вашій специфікації OpenAPI. Виявляйте критичні зміни — наприклад, зміну типу поля з integer на string — до того, як вони потраплять у продакшн.
Перевірка конфігураційних файлів
Перевіряйте, чи відповідають JSON-конфіги для CI/CD-пайплайнів, маніфестів Kubernetes або налаштувань застосунку очікуваній схемі перед комітом. Запобігає збоям розгортання через відсутні або неправильно записані ключі.
Шлюзи DevOps-пайплайну
Додайте валідацію схеми як крок CI для відхилення корисних навантажень, що порушують контракт. Це підходить для файлів змінних Terraform, вхідних даних GitHub Actions або будь-якого структурованого JSON, що споживається автоматизацією.
Перевірка тестових даних у QA
Переконайтесь, що тестові фікстури та файли з mock-даними відповідають тій самій схемі, яку очікує ваш застосунок. Невідповідність тестових даних є поширеним джерелом хибнопозитивних результатів тестів.
Прийом даних у пайплайні
Перевіряйте вхідні 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, 2019-09 і 2020-12

JSON Schema пройшла кілька версій чернеток. Draft 7 (опублікований у 2018 році) має найширшу підтримку серед інструментів. Draft 2019-09 запровадив $defs (замість definitions), unevaluatedProperties і $recursiveRef. Draft 2020-12 (найостанніший стабільний випуск) замінив $recursiveRef на $dynamicRef і запровадив prefixItems для валідації кортежів. Вибираючи версію чернетки, перевіряйте, чи підтримує її ваша бібліотека валідації. Ajv підтримує всі три версії. Бібліотека jsonschema для Python підтримує до 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 можна також напряму використовувати action check-jsonschema.