UltKit
Изображения11
PDF13
Документы и данные7
Видео6
Аудио4
Другие инструменты22

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

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

Вывод

Символов: 0 · слов: 0 · строк: 0

Символов: 0 · слов: 0 · строк: 0

Всё работает в этой вкладке браузера. Ваш текст никуда не загружается и не сохраняется.

Типы значений JSON

RFC 8259 допускает только эти значения. Объекты и массивы могут быть вложенными; всё остальное — листовые значения.

ТипПримерПравило
Объект{"id": 7, "tags": ["a"]}Ключи — строки в двойных кавычках; элементы разделяются запятыми, без запятой в конце.
Массив[1, "two", null]Упорядоченный список любых значений, типы можно смешивать.
Строка"caf\u00e9 \"quoted\""Только двойные кавычки; управляющие символы нужно экранировать; экранирование \u использует четыре шестнадцатеричные цифры.
Число-12.5e3Только десятичные: необязательный минус, без ведущих нулей, необязательные дробная часть и экспонента. Никаких NaN и Infinity.
Литералы true, false, nulltrueВ нижнем регистре, без кавычек.

Что отклоняет парсер

Каждый пример ниже был передан тому же JSON.parse, который использует форматировщик, при сборке этой страницы.

Входные данныеПроблемаJSON.parse
{"a": 1,}Запятая в концеОтклонено
{'a': 1}Строки в одинарных кавычкахОтклонено
{"a": 1 /* note */}КомментарииОтклонено
{a: 1}Ключ без кавычекОтклонено
{"n": NaN}NaN не является числом JSONОтклонено
{"n": 012}Ведущий нольОтклонено
{"n": 0x1F}Шестнадцатеричное числоОтклонено

Экранирование в строках JSON

СимволЗапись в JSON
Двойная кавычка"\""
Обратная косая черта"\\"
Перевод строки"\n"
Табуляция"\t"
Возврат каретки"\r"
Управляющий символ U+0001"\u0001"
Косая черта (экранировать не обязательно)"/"
Буква вне ASCII (экранирование не нужно)"é"

Каким правилам подчиняется валидный JSON

JSON описан в RFC 8259 (по сути идентичен ECMA-404). Документ состоит из единственного значения: объекта, массива, строки, числа, true, false или null. Ключи объектов всегда являются строками в двойных кавычках. Строки записываются только в двойных кавычках, и в них нужно экранировать кавычку, обратную косую черту и любой управляющий символ ниже U+0020, поэтому табуляция и переводы строки внутри строки записываются как \t и \n. Кроме того, RFC 8259 требует использовать UTF-8 для JSON, которым обмениваются системы.

Числа десятичные: без ведущих нулей, без шестнадцатеричной записи, без NaN и Infinity и без знака плюс впереди. В формате нет комментариев и нет висящих запятых. Именно эти два правила вызывают большинство ошибок на практике, потому что литералы объектов JavaScript, JSON5 и многие конфигурационные файлы допускают и то и другое. Справочная таблица ниже получена так: каждую типичную ошибку мы передали тому же парсеру, который использует форматировщик.

Форматирование, минификация, сортировка

Форматирование добавляет переводы строк и отступы, чтобы структуру было удобно читать: два пробела — самый распространённый стиль в проектах на JavaScript, четыре пробела — обычный выбор при json.dumps(indent=4) в Python, а табуляция позволяет каждому читателю выбрать ширину отступа. Минификация убирает все незначащие пробелы: это уменьшает размер ответов API и позволяет уместить документ в одну строку для логов или переменных окружения.

Сортировка ключей упорядочивает элементы каждого объекта по алфавиту, рекурсивно. Объекты JSON по определению неупорядочены, поэтому сортировка не меняет смысл, но заметно упрощает сравнение двух документов из разных систем. Учтите, что при разборе числа превращаются в double из JavaScript: целые числа больше 2^53 (9 007 199 254 740 992), например некоторые идентификаторы из баз данных, теряют точность при повторном форматировании, поэтому храните их как строки.

Из JSON в другие форматы

Отформатированный документ читать проще, но иногда он нужен в другом виде. Массив объектов превращается в таблицу с помощью JSON в CSV, а конвертер данных переводит целые файлы между JSON, XML, YAML и CSV.

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

Почему форматтер не принимает JSON с комментариями?
В стандартном JSON нет синтаксиса комментариев: RFC 8259 намеренно его не включает. Удалите комментарии или оставьте файл в формате JSONC или JSON5, если программа, которая его читает, поддерживает эти форматы.
Что означает «Unexpected token» в ошибке JSON?
Парсер встретил символ, которого в этом месте быть не может, например одинарную кавычку, висящую запятую перед } или ключ без кавычек. Указанные строка и столбец показывают на этот символ.
Меняет ли сортировка ключей мои данные?
Нет. Порядок элементов объекта в JSON не имеет значения, поэтому отсортированный документ равнозначен исходному. Порядок элементов массива значим и никогда не меняется.
Почему длинное число изменилось после форматирования?
JavaScript хранит числа как 64-битные числа с плавающей точкой, которые точно представляют целые только до 2^53. Бо́льшие идентификаторы при разборе округляются; передавайте их строками, чтобы сохранить все цифры.
Можно ли отформатировать JSON-файл, а не вставлять текст?
Откройте файл в любом текстовом редакторе, выделите всё и вставьте сюда. Очень большие файлы в десятки мегабайт могут замедлить работу вкладки, пока текстовое поле их отображает.