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

Проверить JSON

Не просто «валидный» или «невалидный» — строка, столбец, символ и что с этим делать. Ничего не сохраняется; проверка выполняется прямо здесь.

  • Не сохраняется
  • Без очереди и ожидания
  • Без регистрации и водяных знаков
Отформатировано

Вставьте JSON — он проверяется по мере ввода.

Как это работает

1

Вставьте JSON

Или перетащите файл. Он читается на месте; ничего никуда не отправляется.

2

Прочитайте вердикт

Валидный — с подсчётом того, что внутри. Или невалидный — с точной отметкой места ошибки.

3

Исправьте и проверьте снова

Редактируйте прямо здесь — ответ обновляется по мере ввода.

Что на самом деле запрещает JSON

Грамматика JSON намеренно крошечная, и почти любая ошибка проверки — одна из немногих вещей, которые люди заимствуют из JavaScript, но которых в JSON никогда не было. Висячая запятая после последнего элемента. Одинарные кавычки вместо двойных. Ключи без кавычек. Комментарии — в JSON их нет и никогда не было. NaN и Infinity — допустимые числа в JavaScript, но недопустимые в JSON. И метка порядка байтов в начале файла — невидимая в любом редакторе, её добавляют некоторые программы Windows при сохранении в UTF-8, и из-за неё вполне корректный документ падает на первом же символе.

Две вещи допустимы, но всё равно доставят проблемы — поэтому «валидный» не значит «правильный». Дубликаты ключей спецификация не запрещает — а каждый парсер разрешает их по-своему, большинство берёт последний, так что документ с повторяющимся ключом проходит проверку здесь и означает разное в разных языках. И у чисел в JSON нет установленного предела точности, тогда как большинство парсеров читает их как числа с плавающей точкой: целое больше примерно девяти квадриллионов молча округляется — поэтому большие идентификаторы так часто передают строками.

В ответ вы получаете точную строку, столбец и символ, где разбор остановился, и это обычно полезнее самого сообщения. Парсер сообщает место, где документ перестал иметь смысл, а не место, где сделана ошибка: пропущенная закрывающая скобка обнаружится в конце файла, а пропущенная запятая — на токене после неё. Привычка смотреть чуть раньше указанной позиции экономит больше всего времени.

Синтаксически корректный — не то же самое, что правильный, и это различие важно. Здесь подтверждается, что синтаксис разбирается. Есть ли в документе поля, которых требует ваш API, в допустимом ли диапазоне значение, действительно ли дата — это дата, — ничто из этого не вопрос JSON. Это проверка по схеме, для неё нужна схема, и документ может быть безупречным здесь и сразу же отвергнут сервисом, которому вы его отправляете.

Если нужно другое

Для проверки документов по схеме, а не по грамматике, стандарт — JSON Schema, а самая быстрая его реализация — ajv: он скажет, что обязательного поля нет или значение вне диапазона, — а обычно вас интересует именно это. check-jsonschema выполняет те же проверки из командной строки и в CI.

Для командной строки нужен jq: jq empty file.json проверяет файл и при успехе ничего не выводит — ровно то, что нужно скрипту, а jq . форматирует. Для файлов, слишком больших для памяти, jq --stream и ijson для Python разбирают документ по частям, чего не может ни одна страница, загружающая документ целиком.

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

Мой JSON где-нибудь сохраняется?

Нет. Нет запросов к серверу и нет журналирования, ничего не сохраняется. После загрузки страницы можно отключиться от интернета — она продолжит работать. Здесь это важнее, чем кажется: в онлайн-форматтеры вставляют ответы API, конфигурационные файлы и тела ошибок, а в них регулярно попадаются токены, данные клиентов и внутренние имена хостов.

Что я узнаю, если JSON сломан?

Строку, столбец, саму строку с указателем ^ под нужным символом и то, что ожидалось в этом месте. Большинство поломок JSON вызваны одной из четырёх причин — висячая запятая, одинарные кавычки вместо двойных, ключ без кавычек или настоящий перенос строки внутри строки, — и каждая из них названа по имени, а не описана как абстрактная синтаксическая ошибка.

Что считается валидным?

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

Проверяет ли он JSON по схеме?

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

Почему он пишет «валидный», а мой API всё равно отклоняет?

Потому что валидный JSON и JSON, который нужен вашему API, — разные вещи. Синтаксически идеальный документ может не содержать обязательного поля, иметь строку там, где должно быть число, или быть вложен иначе, чем ожидает эндпоинт. Сверьте сводку структуры, которую показывает эта страница, с документацией API — несоответствие обычно видно сразу.

Правильно ли проверяются большие числа?

Да, цифра в цифру — большинство валидаторов молча их портят. Число в JavaScript — 64-битное число с плавающей точкой, поэтому точно хранит только целые числа до 9 007 199 254 740 991. Всё, что больше, — ID поста в Twitter/X, snowflake в Discord, номер банковского счёта, 64-битный ключ базы данных — теряет последние цифры, как только проходит через `JSON.parse`. Число при этом выглядит правдоподобно, и именно этим оно опасно: 7205759403792793600 незаметно превращается в 7205759403792793000. Эта страница сохраняет вставленные вами цифры в точности и сообщает, сколько чисел ей пришлось защитить.

Есть ли ограничение по размеру?

Только доступная память, а не наш лимит. Документы в несколько мегабайт форматируются мгновенно; очень большие ограничены тем, сколько можно удержать в памяти одновременно, а не чем-то с нашей стороны.

Полезно знать: Проверяется, что JSON синтаксически корректен, а не что он что-то означает. Документ может быть полностью валидным и при этом не содержать полей, которых ждёт ваш API, — это проверка по схеме, и для неё нужна схема. Здесь вы получаете точную строку, столбец и символ, где разбор остановился.

Разместите этот инструмент на своём сайте

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