Форматер і валідатор JSON
Вставте JSON, щоб відформатувати його з відступами, мініфікувати або відсортувати ключі. Якщо JSON не вдається розібрати, форматер показує рядок і стовпець, де парсер зупинився, і позначає місце помилки вказівником. Тож пропущену кому у відповіді на 3 000 рядків ви знайдете за кілька секунд.
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-файл, а не вставляти текст?
- Відкрийте файл у будь-якому текстовому редакторі, виділіть усе та вставте сюди. Дуже великі файли розміром у десятки мегабайтів можуть уповільнити вкладку, поки текстове поле їх відображає.