Інструменти розробника · JSON форматування & реаніматор
Як JSON активатор знаходить точний рядок та стовпець помилки
· Як працює
Опубліковано ToolAcre · Рецензування журналу
свінгери введення розробник-workflow

Звіт про двигуни браузера JSON.parse зникає по-різному, і деякі дають лише образу. Цей пост пояснює, як валідатор перетворює, що в рядок і стовпець, і чому позначки положення, де припинилися парсінг, а не де ви зробили помилку.
Повідомлення про помилку, що говорить вам нічого — чому «Несподівано токени» JSON на позицію 1432- без використання 400-лінійний файл
Помилки, такі як «Unexpected Token» розчаровує в тривалій конфігурації, оскільки вона пропонує не місце розташування, яке ви можете відкрити в редакторі. JSON.parse є авторським аналізом браузера, але його діагностичний текст відрізняється серед JavaScript двигуни і варіанти. ToolAcre не вгадувати розташування, збігаючи нестабільний англійський рядок помилок. Якщо JSON.parse не вдається, окремий строгий сканер проходить оригінальний текст для визначення першого символу JSON не можна приймати граматику.
Що таке JSON , як це читає, - прогулянка через токенизацію і граматика рекурсивного походження, яка споживає одне значення в часі
JSON має шість структурних символів — брекетів, кронштейнів, колони та коми — і значення, які можуть бути рядки, цифри, масиви, об'єкти, правда, помилкові або null. Сканер повинен знати, чи він знаходиться всередині цитованої рядка, перш ніж викликати кому роздільник: {"note":"A,B"} має одне значення, не два. За допомогою значення або елемента об'єкта і перевірок, які можуть юридично слідувати наступним чином. RFC 8259 визначає цю граматику, і на відміну JavaScript об'єкт Лільсів це не дозволяє коментарям або причепом.
Від образу до рядка і стовпчика — підраховуючи нові лінії до зміщення, і чому CRLF закінчення і багатобайтні символи ускладнюють кількість
Сканер зазвичай починається з нульового зсуву в оригінальному режимі JavaScript рядок. Щоб зробити це корисним, підрахуйте лінії перерву до настання зміщення і знайдіть, як далеко не лежить від останнього перерви. CRLF повинні бути оброблені як одне закінчення візуальної лінії, а не два лінії; положення в JavaScript кількість рядків UTF-16 блоки коду, не UTF-8 байти на диску. Не-BMP Смітки можуть зайняти два блоки коду в редакторі, що візуально показує один гліф. UI повідомляє про рядок, стовпець і витяжку, щоб ви могли перевірити догляд за файлом, який ви заробили.
Де парсинг зупиняється, де помилкова помилка - пропущена кома повідомила в наступному ключі, а променева цитата може відштовхнути помилки багато рядків вниз
Першим неможливим жетоном є часто після оригінальної помилки. У об'єкті, забуваючи коми після того, як правда, робить пропозицію на початку наступного майна незаконним: парсер чекав коми або закриття латунь. Неперевершений рядок може викликати помилку, що з'являються в пізній рядку або кінець введення. Прочитати назад з вказаної точки, щоб знайти відсутній емітер; не припустити персонажа під опікою, необхідно видалити.
Створений приклад: конфігурація з однією відсутністю коми — повідомлення, навколишні токени, і як повернутися назад до реальної причини
Спробуйте літеральний трилінійний документ {"name": "demo", після чого "enabled":true on line two and "port":8080Ми можемо самі зателефонувати одержувачу. ToolAcre лінія звітів 3, стовпчик 1, офсет 31: Очікується кома або } після прецедентного майна, і вона показує догляд за першою цитатою «порту». Вставте кому в кінці лінії два, потім знову валідуйте. Це діагностика першої синтаксисної перешкоди, не є судом, що слово «порт» неправильно.
Як виглядають двигуни браузера — V8, SpiderMonkey і JavaScriptCore фраза однакова невдача по-іншому, тому послідовна лінія-і-жовтий звіт допомагає
V8, SpiderMonkey і JavaScriptCore використовуються різні слова і іноді різні контекстні фрагменти для того ж JSON.parse відмова. ToolAcreСканер подає власну структурну причину і місце, коли рідний парсер відхиляє значення. Якщо сканер не погоджується з JSON.parse, інструмент повертає похибку двигуна, а не пошиття позиції. Цей недолік є безпечним, ніж впевнено вказується на здогадний характер.
Що це не обкладинка — сеймантичні проблеми, такі як неправильні типи, відсутні поля або schema порушення, які синтаксисний реактиватор ніколи не буде
Синтактичний дійсний об'єкт може бути невірним для вашого додатка: відсутній необхідний поле, вік, записаний як текст, два дублікати ключі або посилання на неіснуючий файл не є автоматично недійсним JSON. RFC 8259 Скажіть імена учасників, які повинні бути унікальними для взаємопроникності, але mere parsing не використовує ваші API шма. Дійсний синтаксис тут і валідувати семантичні обмеження в програмі, яка споживає документ.
Поцілунок: читати позицію як «перший жетон граматики не можна приймати» — і як можна JSON форматування & активатор звітує, що рядок та стовпчик без завантаження тексту
Повідомити про те, що ця граматика не може прийняти. Повернутися до причини, зафіксуйте один номер і перейміть. JSON форматувальник і валідатор це локально без завантаження заданої конфігурації. Не вставте реальні облікові дані про виробництво в будь-який публічний сайт, якщо редактор офлайн може діагностувати файл.