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, null | true | В нижнем регистре, без кавычек. |
Что отклоняет парсер
Каждый пример ниже был передан тому же 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-файл, а не вставлять текст?
- Откройте файл в любом текстовом редакторе, выделите всё и вставьте сюда. Очень большие файлы в десятки мегабайт могут замедлить работу вкладки, пока текстовое поле их отображает.