Перейти к содержимому
Aback Tools Logo

Как Валидировать JSON Онлайн: Синтаксис, Схема и Частые Ошибки

Как валидировать JSON онлайн: что значит валидный JSON по RFC 8259, браузерные валидаторы, проверка по JSON Schema, пять самых частых ошибок и их исправление, а также программная валидация в JS, Python и CI.

DH
Tutorials & How-Tos13 мин чтения2,800 слов

Валидация JSON — первое, что стоит делать всякий раз, когда JSON покидает одну систему и попадает в другую: до того, как он дойдёт до вашего API, до сохранения в базу данных, до обработки скриптом. Невалидный JSON не выдаёт полезной ошибки — он выдаёт сбой разбора, который часто приписывают не тому компоненту. Это руководство охватывает все практические способы валидации JSON онлайн и офлайн, объясняет, что на самом деле значит «валидный JSON», и показывает, как диагностировать и исправлять самые частые ошибки.

< 1сВремя онлайн-валидацииБез установки
0 КБЗагруженных данныхПолностью работает в браузере
5Самых частых ошибок JSONВсе ловятся валидатором

Что на самом деле значит «валидный JSON»

У JSON (JavaScript Object Notation) есть формальная спецификация, определённая RFC 8259 и стандартом ECMA-404. Документ JSON валиден, когда полностью соответствует этой спецификации — не больше и не меньше. Правила строже, чем ожидают многие, и несколько вещей, которые разрешает JavaScript, в JSON явно запрещены.

Правила спецификации JSON

  • Строки должны быть в двойных кавычках - строки в одинарных кавычках (`'value'`) не являются валидным JSON, даже если JavaScript их принимает.
  • Без висячих запятых - `[1, 2, 3,]` и `{"a": 1,}` невалидны; запятую после последнего элемента нужно убрать.
  • Без комментариев - `// строчные комментарии` и `/* блочные комментарии */` не входят в спецификацию JSON.
  • Без значений undefined - `undefined` — концепция JavaScript; JSON допускает только `null`, числа, строки, булевы значения, массивы и объекты.
  • У чисел не может быть ведущих нулей - `012` не валидный JSON; используйте `12`.
  • Ключи объектов должны быть строками - `{1: "value"}` невалиден; ключи должны быть строками в двойных кавычках.
  • Без управляющих символов в строках - сырые переводы строк, табуляции и другие управляющие символы нужно экранировать (`\n`, `\t` и т. д.).

Note

JSON5 и JSONC (JSON с комментариями) — популярные ослабленные надмножества JSON, допускающие комментарии, висячие запятые и одинарные кавычки. Если ваш инструмент создаёт такие форматы, стандартный JSON-валидатор их отклонит — используйте парсер JSON5 или JSONC либо уберите расширения перед валидацией.

Синтаксически валидный против семантически валидного

Документ JSON может быть синтаксически валидным (правильно сформирован по спецификации), но семантически невалидным для вашего приложения. Например, JSON-объект с "age" = -5 — это валидный JSON, но некорректный возраст для профиля пользователя. Валидация синтаксиса — то, что проверяет JSON-парсер; валидация по схеме — то, что ловит семантические ошибки. Оба уровня важны, и это руководство охватывает оба.

Как валидировать JSON онлайн за секунды

Самый быстрый способ проверить, валидна ли строка JSON, — вставить её в онлайн-валидатор JSON. Без установки, без настройки, без аккаунта. Результат мгновенный, а при использовании браузерного инструмента ваши данные никогда не покидают ваше устройство.

Текст JSON — это сериализованное значение. Заметьте, что некоторые прежние спецификации JSON ограничивали текст JSON объектом или массивом.

- Спецификация JSON, RFC 8259

Использование форматера и валидатора JSON

Форматер и валидатор JSON на Aback Tools одновременно валидирует и форматирует JSON. Вставьте любую строку JSON — он сразу скажет, валидна ли входная строка. Если невалидна, инструмент подсвечивает позицию ошибки с номером строки и понятным описанием того, что пошло не так. Если валидна, на выходе — чистый отформатированный JSON, который можно скопировать прямо в проект.

Такой двойной функционал важен на практике. Когда вы получаете JSON от API, копируете его из файла конфигурации или вытаскиваете из строки лога, сырой текст часто минифицирован и плохо читается. Форматирование в рамках валидации даёт сразу две вещи: подтверждение валидности JSON и читаемую версию, которую реально можно изучить.

Tip

Если вам нужен только ответ да/нет - валидный ли это JSON? - вставьте payload и посмотрите индикатор состояния вверху панели вывода. Зелёный значок «Валидный JSON» означает, что парсер принял входные данные без ошибок. Красный индикатор означает проблему, а детали ошибки скажут, какая именно.

Форматер и валидатор JSON

Вставьте любую строку JSON, чтобы мгновенно валидировать её, красиво отформатировать и подсветить синтаксис прямо в браузере - с диагностикой ошибок на уровне строк и без загрузки данных.

Open tool

Частые ошибки JSON и как их исправить

Большинство невалидных JSON-документов терпят неудачу по одной из пяти причин. Знание этих шаблонов позволяет быстро исправлять ошибки, не полагаясь целиком на инструмент для диагностики.

1

Висячая запятая

Висячие запятые — самая частая ошибка JSON, в значительной мере потому, что JavaScript и большинство современных языков допускают их в литералах объектов и массивов. JSON — нет. Уберите запятую после последнего свойства в каждом объекте и после последнего элемента в каждом массиве.

Висячая запятая - невалидно vs валидно
json
// ❌ Невалидно - запятая после последнего свойства
{
  "name": "Alice",
  "age": 30,
}

// ✓ Валидно - без висячей запятой
{
  "name": "Alice",
  "age": 30
}
2

Строки в одинарных кавычках

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

Одинарные кавычки - невалидно vs валидно
json
// ❌ Невалидно - ключ и значение в одинарных кавычках
{'city': 'London'}

// ✓ Валидно - ключ и значение в двойных кавычках
{"city": "London"}
3

Комментарии в JSON

У JSON нет синтаксиса комментариев. Если ваш JSON содержит комментарии `//` или `/* */` - часто добавляемые в конфиги как документация - стандартный JSON-парсер отклонит весь документ. Удалите все комментарии перед разбором или перейдите на формат вроде JSONC или JSON5, который поддерживает их нативно.

Комментарии - невалидный JSON
json
// ❌ Невалидно - комментарии не входят в спецификацию JSON
{
  // Это объект пользователя
  "name": "Alice",
  "role": "admin" /* повышенные права */
}
4

Неэкранированные спецсимволы в строках

Сырые переводы строк, табуляции, обратные слэши и некоторые управляющие символы Unicode должны экранироваться внутри строк JSON. Сырой перевод строки внутри строкового значения - в отличие от escape-последовательности `\n` - делает JSON неразбираемым. Эта ошибка часто появляется, когда JSON генерируется конкатенацией строк в коде вместо использования полноценного JSON-сериализатора.

Неэкранированные символы - невалидно vs валидно
json
// ❌ Невалидно - сырой перевод строки внутри значения
{"message": "line one
line two"}

// ✓ Валидно - экранированный перевод строки
{"message": "line one\nline two"}
5

Непарные скобки или фигурные скобки

Незакрытая скобка или непарный закрывающий разделитель вызывает сбой разбора. Это типично для отредактированного вручную JSON и для JSON, сгенерированного кодом, собирающим payload конкатенацией строк. Форматер с сопоставлением скобок делает их видимыми немедленно.

Непарные скобки - невалидно vs валидно
json
// ❌ Невалидно - открыт массив, закрыт объект
{
  "items": [1, 2, 3
}

// ✓ Валидно - скобки парные
{
  "items": [1, 2, 3]
}

Детектор дублирующихся ключей JSON

Находит повторяющиеся ключи объектов в любом JSON-payload - тихие перезаписи из-за дублирующихся ключей валидны по мнению некоторых парсеров, но приводят к потере данных и трудно диагностируемым багам.

Open tool

Валидация по JSON Schema: проверка значений, а не только синтаксиса

Валидация синтаксиса подтверждает, что JSON корректно сформирован. Валидация по схеме подтверждает, что JSON содержит правильные данные - правильные поля, правильные типы, правильные диапазоны значений. Это две разные проверки, и в продакшен-системах нужны обе.

Что такое JSON Schema?

JSON Schema — словарь для описания структуры и ограничений JSON-документа. Документ-схема указывает, какие поля обязательны, какого типа должно быть каждое поле, минимальные и максимальные значения чисел, допустимые шаблоны строк и другое. Валидируя JSON-документ по схеме, вы получаете точные ошибки вроде «поле 'email' обязательно» или «поле 'age' должно быть положительным целым» - а не просто «невалидный JSON».

Использование валидатора JSON Schema

Валидатор JSON Schema на Aback Tools принимает JSON-payload и JSON Schema и валидирует payload по ограничениям схемы. Он сообщает об ошибках на уровне правил с точным путём поля, которое не прошло проверку, - вы знаете не только, что валидация провалилась, но и какое поле нарушило какое правило. Это подходящий инструмент, когда нужно проверить, что ответ API соответствует контракту или что конфиг содержит все обязательные настройки.

Note

Если у вас есть JSON-payload, но ещё нет схемы, [Генератор JSON Schema](/tools/data/converters/json-schema-generator) автоматически выведет схему Draft-07 или Draft 2020-12 из вашего payload. Он определяет типы, обязательные поля, форматы строк (email, дата, URI) и структуры вложенных объектов. Используйте сгенерированную схему как отправную точку и уточняйте её дополнительными ограничениями.

Валидация синтаксиса против валидации по схеме

АспектВалидация синтаксисаВалидация по схеме
Что проверяетСоответствие спецификации JSONТипы данных, поля, ограничения
Нужный инструментЛюбой JSON-парсерВалидатор JSON Schema
Вывод ошибкиПозиция строки/символаПуть поля + нарушенное правило
ЛовитПропущенные кавычки, лишние запятыеНеверный тип, отсутствующее поле
Когда использоватьВсегда - первая проверкаКогда существует контракт
Успех = гарантияРазбирается любой JSON-библиотекойСоответствует вашей модели данных

Генерация схемы из существующего payload

Самый быстрый способ добавить валидацию по схеме в существующий проект - сгенерировать схему из заведомо корректного payload. Вставьте репрезентативный JSON-объект в Генератор JSON Schema, и он создаст полную схему с определениями типов, обязательными полями и подсказками формата. Скопируйте вывод в проект и используйте как контракт валидации для всех будущих payload этого типа.

Программная валидация JSON

Онлайн-инструменты — быстрейший выбор для разовых проверок, но продакшен-системам нужна валидация JSON, встроенная в код. В каждом крупном языке программирования есть хотя бы одна хорошо поддерживаемая библиотека разбора JSON, а у большинства — ещё и библиотеки валидации по схеме.

JavaScript и TypeScript

В JavaScript `JSON.parse()` выбрасывает `SyntaxError` при невалидном JSON - оберните его в try/catch, чтобы обработать ошибку аккуратно. Для валидации по схеме AJV (Another JSON Validator) — самая распространённая библиотека, поддерживающая JSON Schema от Draft-07 до Draft 2020-12 с высокой производительностью. Zod — популярная TypeScript-first альтернатива, валидирующая JSON по схемам типов в рантайме с полной TypeScript-инференцией. Конвертер JSON в схему Zod на Aback Tools автоматически генерирует схему Zod из любого JSON-payload.

Валидация синтаксиса в TypeScript
typescript
function isValidJson(input: string): boolean {
  try {
    JSON.parse(input);
    return true;
  } catch {
    return false;
  }
}

// Or get the parsed value and the error together:
function parseJson<T>(input: string): { data: T } | { error: string } {
  try {
    return { data: JSON.parse(input) as T };
  } catch (e) {
    return { error: (e as SyntaxError).message };
  }
}

Python

Встроенный модуль `json` в Python выбрасывает `json.JSONDecodeError` (подкласс `ValueError`), когда разбор не удаётся. Объект ошибки содержит номер строки, столбец и описание. Для валидации по схеме стандартный выбор - jsonschema и pydantic; pydantic особенно популярен в проектах FastAPI, потому что валидирует и десериализует JSON в типизированные Python-объекты за один шаг.

Валидация синтаксиса в Python
python
import json

def is_valid_json(text: str) -> bool:
    try:
        json.loads(text)
        return True
    except json.JSONDecodeError as e:
        print(f"Invalid JSON at line {e.lineno}, col {e.colno}: {e.msg}")
        return False

Командная строка

На любой системе с установленным Python команда `python3 -m json.tool input.json` валидирует и красиво форматирует JSON-файл одной командой. Код выхода ненулевой при сбое, что делает её подходящей для shell-скриптов и CI-конвейеров. Инструмент `jq` - более мощная альтернатива: `jq . input.json` валидирует и форматирует, а `jq 'empty' input.json` валидирует без вывода.

Быстрая валидация JSON из командной строки
bash
# Validate and pretty-print with Python (built-in, no install)
python3 -m json.tool input.json

# Validate silently with jq (exit code 0 = valid, 1 = invalid)
jq empty input.json && echo "Valid" || echo "Invalid"

# Validate multiple files with a loop
for f in *.json; do
  jq empty "$f" && echo "$f: valid" || echo "$f: INVALID"
done

Tip

В CI-конвейерах используйте `jq empty` вместо `python3 -m json.tool` для валидации JSON. `jq` быстрее на больших файлах, не выдаёт вывод при успехе (чистые логи) и возвращает осмысленный код выхода, на который ваша CI-система может реагировать без дополнительной логики.

Валидация специальных JSON-форматов

Стандартная валидация JSON покрывает файлы `.json` и API-payload. Но JSON встречается и в других форматах со своими требованиями к валидации - форматах, где стандартный JSON-парсер либо выдаёт неверные результаты, либо отклоняет весь вход.

JSONL и NDJSON (JSON Lines)

Файлы JSON Lines (`.jsonl`) содержат один JSON-объект на строку без объемлющего массива. Этот формат стандартен для лог-файлов, ML-датасетов и стриминговых API. Стандартный JSON-парсер отклонит JSONL-файл, потому что файл целиком не является валидным JSON-документом - каждую строку нужно разбирать отдельно. Валидатор и исправитель JSON Lines валидирует каждую строку по отдельности, сообщает, в каких номерах строк есть ошибки, и предлагает безопасные автоправки для частых проблем форматирования.

JSON с дублирующимися ключами

Спецификация JSON технически допускает дублирующиеся ключи в объектах, но поведение не определено - разные парсеры обрабатывают это по-разному. `json.loads()` в Python сохраняет последнее значение; некоторые парсеры - первое; иные выбрасывают ошибку. На практике дублирующиеся ключи почти всегда баг - неудачное слияние или ошибка шаблонизации. Детектор дублирующихся ключей JSON находит все повторяющиеся ключи и точно сообщает, где они встречаются.

JSON в YAML-конфигурационных файлах

YAML — надмножество JSON, поэтому любой валидный JSON — также валидный YAML. Но JSON, встроенный в YAML-файлы - например, как значение строкового поля, - требует собственной валидации. Если вы работаете с YAML-конфигами, содержащими встроенные JSON-значения, валидируйте JSON-фрагменты отдельно форматером JSON, а затем весь YAML - YAML-валидатором. Если проект использует оба формата и нужно сравнить два конфигурационных файла, Подсветка различий JSON/YAML обрабатывает оба одновременно.

Warning

Никогда не используйте YAML-парсер как замену JSON-валидатору. YAML допускает конструкции, не являющиеся валидным JSON - то, что YAML принимает ваш ввод, не подтверждает соответствие JSON спецификации. Для валидации JSON используйте специализированный JSON-парсер, даже если JSON встроен в YAML-файл.

Лучшие практики валидации JSON

Провалидировать JSON один раз перед важной операцией - хорошо. Встроить валидацию в каждую точку, где JSON входит или выходит из вашей системы, - лучше. Эти практики применимы, строите ли вы API, обрабатываете data-пайплайны или управляете конфигурационными файлами.

Валидируйте на приёме, а не на потреблении

Правильный момент для валидации JSON - когда он впервые входит в вашу систему: на границе API, в обработчике загрузки файлов, в консьюмере очереди сообщений. Валидация на потреблении (в функции, которая читает значение в глубине вашего кода) означает, что невалидные данные распространяются дальше до сбоя, и ошибку труднее отследить. Валидируйте рано и отклоняйте невалидный ввод на входной точке.

Используйте схему, а не только проверку синтаксиса

Валидация синтаксиса - минимальная планка. В любой системе, где JSON переносит критичные для бизнеса данные - записи пользователей, платёжные payload, значения конфигурации, - схема добавляет второй уровень, который ловит неверные типы, отсутствующие обязательные поля и значения вне диапазона, которые синтаксическая валидация не видит. Сгенерируйте начальную схему из заведомо корректного payload с помощью Генератора JSON Schema и уточняйте её по мере развития модели данных.

Обрабатывайте ошибки валидации явно

Вызов `JSON.parse()` в try/catch, который глотает ошибку и возвращает null, хуже, чем отсутствие валидации, - он прячет проблему. Когда валидация JSON проваливается, логируйте ошибку с источником ввода, точным сообщением об ошибке и достаточным контекстом для воспроизведения. Возвращайте вызывающему осмысленную ошибку, а не пустой результат, который вызовет вторичную ошибку в другом месте.

  • Логируйте сырой ввод - когда валидация JSON падает в продакшене, сырой ввод - самый ценный артефакт для отладки. Логируйте усечённую версию (первые 500 символов) вместе с ошибкой.
  • Включайте контекст источника - отмечайте, откуда пришёл JSON: какой эндпоинт API, какой файл, какое сообщение очереди. Это превращает общий ошибку разбора в действенный инцидент.
  • Настройте алерты на сбои разбора - всплеск ошибок валидации JSON часто сигнализирует о ломающем изменении в апстрим-API или о деплое, привнёсшем баг сериализации.
  • Тестируйте невалидными входами - включите невалидный JSON (висячая запятая, пропущенная кавычка, неверный тип) в тест-сьют, чтобы убедиться, что обработка ошибок работает корректно.

Tip

Работая с ответами сторонних API, всегда валидируйте перед обработкой - даже для API, которым доверяете. Провайдеры API меняют форму ответов, добавляют новые поля и вносят ломающие изменения. Валидатор схем с версионированными схемами даёт раннее предупреждение об изменениях контракта прежде, чем они вызовут тихие сбои ниже по потоку.

Валидатор JSON Schema

Валидируйте любой JSON-payload по JSON Schema и получайте диагностику ошибок на уровне правил с точными путями полей - без установки, без загрузок.

Open tool

Key takeaways

  • Валидный JSON строго следует RFC 8259: только строки в двойных кавычках, без висячих запятых, без комментариев, без `undefined` и без неэкранированных управляющих символов.
  • Форматер и валидатор JSON одновременно валидирует и форматирует JSON, с диагностикой ошибок на уровне строк, полностью работающей в вашем браузере.
  • Пять самых частых ошибок JSON: висячие запятые, строки в одинарных кавычках, комментарии, неэкранированные управляющие символы и непарные скобки - все мгновенно ловятся валидатором.
  • Валидация синтаксиса подтверждает разбираемость; валидация по JSON Schema подтверждает соответствие данных ожидаемому контракту - обе проверки служат разным целям.
  • Используйте `JSON.parse()` в try/catch для валидации в коде; используйте `jq empty` для быстрых CLI-проверок в CI-конвейерах.
  • Специальные форматы вроде JSONL, JSON с дублирующимися ключами и JSON, встроенного в YAML, требуют валидаторов, привязанных к формату, а не стандартного JSON-парсера.
  • Валидируйте JSON на приёме, а не на потреблении - отклоняйте невалидные данные на входной точке, прежде чем они распространятся по вашей системе.

Частые вопросы

The fastest method is to paste the string into the JSON Formatter & Validator on Aback Tools - it reports valid or invalid in under a second with no setup. In code, use JSON.parse() wrapped in a try/catch in JavaScript, or json.loads() in a try/except in Python. Both throw an exception on invalid input and return the parsed object on success. For command-line checks, `jq empty input.json` exits with code 0 on valid JSON and code 1 on invalid.

Trailing commas are the single most common JSON error. They appear after the last property in an object or the last element in an array: `{"name": "Alice",}` or `[1, 2, 3,]`. JSON does not allow trailing commas even though JavaScript, Python, and most other languages do. The second most common error is single-quoted strings - JSON requires double quotes for both keys and values.

No. The JSON specification (RFC 8259) explicitly excludes comments. Both `//` line comments and `/* */` block comments are invalid in standard JSON. If you need JSON with comments, consider JSONC (used by VS Code config files) or JSON5, both of which are relaxed supersets. When using these formats, make sure your parser explicitly supports them - a standard JSON parser will reject the file.

Syntax validation checks whether the JSON is well-formed per the RFC 8259 specification - parseable by any standard JSON library. Schema validation checks whether the data inside the JSON conforms to a contract: required fields, correct types, value ranges, string formats. A JSON document can be syntactically valid but semantically wrong - for example, `{"age": "thirty"}` is valid JSON but fails a schema that requires age to be a number.

If your JSON.parse() call appears to succeed but returns null, the input string itself is the JSON text `null` - which is perfectly valid JSON. The value `null` is one of the six JSON value types. If you expected an object or array, the input may have been a null literal rather than a missing or empty string. Wrap JSON.parse() in a function that also checks `typeof result !== "object" || result === null` if you specifically need an object.

A JSONL file contains one JSON object per line and is not a valid JSON document on its own - a standard JSON parser rejects it because the file as a whole does not match the JSON grammar. Use the JSON Lines Validator & Fixer on Aback Tools, which validates each line individually and reports which line numbers have parse errors. For CLI validation, `jq empty < input.jsonl` also works by reading each line as a separate JSON value.

The JSON specification says behavior is undefined when an object contains duplicate keys - it does not explicitly forbid them, but different parsers handle them differently. Python keeps the last value, some parsers keep the first, and others throw an error. In practice, duplicate keys are almost always a bug. Use the JSON Duplicate Key Detector on Aback Tools to scan any payload for repeated keys before it causes a silent data-loss issue in your application.

The simplest option is `jq empty filename.json` - it exits with code 0 on valid JSON and code 1 on invalid, with no output on success. For schema validation in CI, use AJV CLI (`ajv validate -s schema.json -d data.json`) or write a short script using Python's jsonschema library. Both integrate cleanly with GitHub Actions, GitLab CI, and other systems that block on non-zero exit codes. Run validation as an early step before any processing to catch issues at the source.

ShareXLinkedIn