Skip to content

Все для WordPress, веб-розробки — і не тільки

JSON: форматування, валідація та ремонт зламаного

JSON: форматування, валідація та ремонт зламаного

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

Перетягніть сюди .json — файл читається локально. Вставляти можна і те, що ще не є валідним JSON: лог, відповідь API з коментарями, фрагмент з кінцевими комами.
Обробка

Ключі й порядок збережені, запис чисел не змінено.

Вставте JSON вище й натисніть «Обробити».

Дані не залишають ваш браузер — розбір і форматування виконуються локально, без відправки на сервер.

Чотири редакції стандарту і чим вони відрізняються

JSON описано кількома документами, і вони не тотожні. Вибір специфікації змінює те, що інструмент вважає помилкою. RFC 4627 (2006) — початкова. Документ верхнього рівня може бути лише об'єктом або масивом; окреме число чи рядок недопустимі. Саме на цю редакцію досі спираються деякі старі бібліотеки. RFC 7159 (2014) — дозволила будь-яке значення на верхньому рівні. Відтоді 42 і "текст" — самодостатні документи JSON. RFC 8259 (2017) — чинна. Додала вимогу UTF-8 для обміну між системами та закріпила, що імена в одному об'єкті мають бути унікальними. ECMA-404 — описує лише синтаксис. Дублікатів ключів вона не забороняє, непарні сурогати не згадує, тому набір попереджень тут найкоротший. Якщо сумніваєтесь — лишайте RFC 8259: це найсуворіший з чинних наборів правил, і те, що пройшло його, приймуть усюди.

Чому власний розбір, а не JSON.parse браузера

Вбудований парсер зроблений для швидкості, а не для діагностики. На однакових даних він мовчить там, де інструмент має говорити: Повідомлення без координат. Браузер каже «Unexpected token» і зміщення у символах; тут — рядок, позиція і що саме очікувалось. Одна помилка на весь документ. Після першого збою розбір відновлюється й показує решту, а не змушує виправляти по одній. Дублікати ключів проходять мовчки. JSON.parse лишає останнє значення, і втрату помічають уже в продакшені. Запис чисел губиться. 1.0 стає 1, а ціле понад дев'ять квадрильйонів змінює останні цифри — саме так ламаються ідентифікатори з бази. Порядок ключів у виводі зберігається таким, як у джерелі, поки ви самі не попросите сортування. Числа тут за замовчуванням виводяться так, як були записані: інструмент показує документ, а не результат його інтерпретації.

Що саме лагодить режим виправлення

Реальні дані рідко бувають чистим JSON. Режим ремонту приводить до стандарту те, що приїжджає з конфігів, логів і чужих API: коментарі // та /* */ — вилучаються; коми перед закриваючою дужкою — прибираються; одинарні та «ялинкові» лапки — зводяться до подвійних; ключі без лапок і числові ключі — беруться у лапки; True, NULL, None, undefined — стають true, false, null; NaN та Infinity — стають null, бо чисел без кінцевого значення у JSON немає; запис чисел — зайвий плюс, крапка на краю, нулі на початку; керуючі символи всередині рядків — екрануються; BOM на початку файлу та обгортка JSONP — знімаються. Жодне виправлення не робиться мовчки: кожне потрапляє у список з кількістю випадків. Якщо результат вас не влаштовує — прапорець вимикається, і документ перевіряється як є.

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