JSON Formatter і валідатор

Acrafto Team Розробники
Оновлено
Очікування вхідних даних. Вставте JSON вище або перетягніть файл .json.

Вставте будь-який JSON у поле вище, і цей JSON formatter та валідатор перевіряє його вже під час введення. Дійсний JSON він гарно форматує з обраним відступом або мініфікує в один рядок. Для недійсного ви отримаєте точне повідомлення про помилку з номером рядка і стовпця, виділений фрагмент, а для типових помилок ще й виправлення одним кліком. Усе працює у вашому браузері, тож відповіді API, конфігураційні файли та експорти не залишають вашого комп’ютера.

Що вміє цей JSON formatter

  • Форматування JSON з відступом 2 пробіли, 4 пробіли або табуляцією. Результат зберігає початковий порядок ключів, якщо ви не позначите Сортувати ключі.
  • Мініфікація JSON видаляє всі пробіли та перенесення рядків. Показник розміру під результатом показує, скільки байтів ви заощадили.
  • Перевірка JSON у реальному часі за RFC 8259, чинним стандартом JSON. Рядок стану зеленіє тієї ж миті, коли документ стає дійсним.
  • Автоматичне виправлення типових помилок: зайві коми в кінці, одинарні лапки, ключі без лапок, коментарі, True, None і NaN у стилі Python, числа на кшталт .5 або +1.
  • Відкриття файлів кнопкою Відкрити файл або перетягуванням файлу .json у поле вводу. Результат потім можна завантажити або повернути у вхідне поле для наступного проходу.

Чому у валідаторі JSON текст помилки важливіший за червоний колір

Більшість онлайн-валідаторів лише повідомляє, що щось не так. Браузери не набагато кращі: JSON.parse у Chrome видає Unexpected token } in JSON at position 148, Firefox пише expected property name or '}', і жоден не скаже, на який рядок дивитися. Цей інструмент має власний парсер, який запам’ятовує, де починається кожен токен. Коли розбір зупиняється, ви отримуєте рядок і стовпець, уривок цього рядка з позначкою ^ під проблемним символом і зрозумілу підказку, наприклад Ймовірно, між двома властивостями бракує коми. Кнопка Перейти до помилки переносить курсор просто на це місце у вхідних даних.

Найчастіші помилки, які ми бачимо у вставлених документах:

Вхідні даніПроблемаПравильний JSON
{'name': 'Ada'}одинарні лапки{"name": "Ada"}
{name: "Ada"}ключ без лапок{"name": "Ada"}
[1, 2, 3,]зайва кома в кінці[1, 2, 3]
{"a": 1 "b": 2}пропущена кома{"a": 1, "b": 2}
{"ok": True}літерал з Python{"ok": true}
{"x": 007}нуль на початку{"x": 7} або {"x": "007"}
// commentкоментару JSON не дозволений

Усі ці помилки, крім пропущеної коми та нуля на початку, виправляє кнопка Виправити за мене. Виправлення навмисно обережне: воно ніколи не вгадує, де має стояти пропущена кома, бо кома в неправильному місці змінює зміст даних, а 007 може означати і число 7, і код. У таких випадках ви натомість отримаєте точну позицію помилки.

Великі числа, порядок ключів та інше, що зазвичай ламається

Багато форматерів спершу викликають JSON.parse, а потім JSON.stringify. Такий цикл непомітно пошкоджує дані. Ідентифікатор Twitter або Snowflake на кшталт 1234567890123456789 перевищує межу 2^53 для чисел у JavaScript і повертається як 1234567890123456800. Значення 1.0 перетворюється на 1, а 1e3 на 1000. Цей форматер ніколи не перетворює числа на числа з рухомою комою. Він копіює кожен літерал точно так, як його записано, тож результат є вірним переформатуванням вхідних даних, а не їх новим тлумаченням. Те саме стосується escape-послідовностей у рядках: "\u00e9" залишається "\u00e9" і не перетворюється на "é".

Порядок ключів також зберігається. Специфікація JSON каже, що члени об’єкта невпорядковані, але конфігураційні файли, тестові фікстури та код-рев’ю читаються значно краще, коли порядок стабільний. Якщо вам потрібна канонічна форма, наприклад щоб порівняти дві відповіді API в інструменті для порівняння текстів, увімкніть Сортувати ключі, і обидва документи покажуть свої властивості за алфавітом на кожному рівні вкладеності.

Форматування чи мініфікація JSON: що й коли використовувати

Відформатований JSON призначений для людей. Використовуйте його, коли переглядаєте відповідь API, пишете package.json, tsconfig.json або документ OpenAPI чи зберігаєте фікстури в репозиторії, де diff має показувати одну зміну на рядок. Два пробіли є усталеною нормою у світі JavaScript, чотири пробіли поширені в проєктах на Python і .NET, а табуляція дозволяє кожному читачеві обрати власну ширину.

Мініфікований JSON призначений для машин. Пробіли та перенесення рядків зазвичай займають від 20 до 40 відсотків відформатованого документа, тож їх видалення зменшує дані, що надсилаються браузерам, значення в Redis чи стовпці бази даних і атрибути data-*, вбудовані в HTML. Gzip частково скорочує цю різницю, але мініфікована версія після стиснення все одно менша. Показник розміру під результатом показує точну різницю для вашого документа.

Робота з JSON у терміналі та редакторах

Для файлів, які ви обробляєте регулярно, утиліта командного рядка швидша за будь-який сайт. jq . file.json форматує, jq -c . file.json мініфікує, а python -m json.tool file.json працює всюди, де встановлено Python. Visual Studio Code форматує JSON комбінацією Shift+Alt+F і перевіряє його за схемою, якщо додати властивість $schema. Ця сторінка для інших випадків: відповідь, скопійована з вкладки «Мережа» в інструментах розробника, рядок журналу, фрагмент конфігурації з вікі або швидка перевірка на комп’ютері, де нічого не можна встановити.

Пов’язані інструменти на цьому сайті: Base64 кодер і декодер декодує корисне навантаження (payload) JWT, тобто JSON, закодований у Base64url. Конвертер Unix timestamp перетворює числа createdAt, які є в більшості відповідей API, на зрозумілі дати, а декодер UUID покаже версію та часову мітку ідентифікаторів у ваших даних. Більше утиліт знайдете в розділі інструменти для розробників.

Часті запитання

Чи завантажується мій JSON на сервер? Ні. Розбір, форматування та виправлення виконуються повністю у вашому браузері на JavaScript. Після завантаження сторінки можна вимкнути інтернет, а інструмент і далі працюватиме. Нічого не записується в журнали й не зберігається.
Чому валідатор відхиляє коментарі, якщо мій редактор їх приймає? Коментарі навмисно прибрав із JSON його автор Douglas Crockford, щоб формат не використовували для директив парсера. Файли на кшталт tsconfig.json або .vscode/settings.json технічно є JSONC, тобто розширенням формату, яке підтримують редактори. Суворі парсери в API, базах даних і більшості мов програмування такі файли відхиляють. Кнопка виправлення видаляє коментарі, тож результат буде дійсним усюди.
Чи можна відформатувати JSON Lines або кілька об'єктів одночасно? Документ JSON містить рівно одне значення. Якщо вставити кілька об'єктів, розділених комами або перенесеннями рядків, валідатор зупиниться на першому зайвому значенні. Візьміть їх у квадратні дужки, щоб отримати масив, а потім відформатуйте. Кнопка виправлення не робить цього автоматично, бо не може знати, чи мали вхідні дані бути одним документом.
Який максимальний розмір? Фіксованого обмеження немає. Документи розміром кілька мегабайтів форматуються на ноутбуці значно швидше ніж за секунду. Понад приблизно 400 КБ підсвічування синтаксису вимикається, щоб сторінка не гальмувала, але копіювання й завантаження працюють і далі.
Чи змінює сортування ключів дані? Ні. Об'єкти в JSON за визначенням невпорядковані (див. статтю про JSON у Вікіпедії), тож парсер прочитає відсортований і початковий документ як одне й те саме значення. Масиви ніколи не перевпорядковуються, бо їхній порядок є частиною даних.
Як екранувати JSON, щоб вставити його в рядок? Спершу мініфікуйте JSON, потім екрануйте кожну зворотну косу риску та подвійну лапку. Багато мов уміють це напряму: JSON.stringify(JSON.stringify(obj)) у JavaScript або json.dumps(json.dumps(obj)) у Python дають рядок JSON, що містить текст JSON.

Я буду вдячний, якщо ви поділитеся цими сторінками з друзями, збережете їх у закладках або посилання на них. Дякую! 🙏