„Zepsuty" JSON to częsty problem: plik wygląda niemal poprawnie, ale parser odmawia jego odczytania. Często przyczyną jest liczba wklejona żywcem z arkusza kalkulacyjnego w polskim formacie.
Typowe przyczyny nieprawidłowego JSON
- Zbędny przecinek przed nawiasem zamykającym —
{"a": 1,}, który JavaScript toleruje, a rygorystyczny parser JSON — nie. - Pojedyncze cudzysłowy zamiast podwójnych — częste przy kopiowaniu z literału obiektu JavaScript.
- Klucze bez cudzysłowów —
{name: "Anna"}zamiast{"name": "Anna"}. - Komentarze — specyfikacja JSON w ogóle ich nie przewiduje, w przeciwieństwie do JSON5 czy JSONC.
- Ucięty wynik — jeśli odpowiedź API czy plik logu zostały ucięte w połowie, dokument pozostaje niezamknięty.
Przecinek dziesiętny — cicha pułapka z Excela
W polskiej notacji przecinek oddziela część dziesiętną, a kropka grupuje tysiące: „1.234,50 zł" to zupełnie normalna cena w arkuszu kalkulacyjnym. Wklejona bez konwersji do pola JSON wartość {"cena": 1.234,50} nie jest dla parsera poprawną liczbą dziesiętną — czyta 1.234, napotyka przecinek w niedozwolonym miejscu, a potem osobny token 50. Narzędzie do naprawy może próbować odgadnąć zamierzoną wartość, ale nie ma gwarancji, czy chodziło o 1234,50, czy o ucięte 1.234.
Jak działa automatyczna naprawa
Narzędzie do naprawy JSON stosuje heurystyki: dodaje brakujące cudzysłowy, usuwa zbędne przecinki, zamyka niezamknięte nawiasy na podstawie kontekstu. Działa to dobrze przy typowych, powszechnych błędach, ale to nie magia — narzędzie nie może zgadnąć, jaka wartość była zamierzona, jeśli dane są poważniej uszkodzone.
Granice możliwości
Automatyczna naprawa poprawia składnię, nie semantykę. Jeśli brakuje całego pola albo wartość jest błędna logicznie, narzędzie tego nie wykryje — wynik nadal wymaga ręcznej weryfikacji, zwłaszcza gdy liczby pochodzą z arkusza w polskim formacie.
Kiedy naprawa jest niejednoznaczna
Niektóre uszkodzenia mają kilka równie prawdopodobnych poprawek. Urwany ciąg {"a": 1, "b": 2 można po prostu zamknąć nawiasem — i stracić dane, jeśli w rzeczywistości chodziło o jeszcze jedno pole. W takich przypadkach heurystyka przyjmuje „najmniej destrukcyjne" założenie, ale to domysł, a nie gwarancja.