Pomoc techniczna

Częste błędy JSON: przecinek na końcu, cudzysłowy i Unexpected token

Napraw niepoprawny JSON: przecinek końcowy, apostrofy, klucze bez cudzysłowów i Unexpected token. Dlaczego JSON.parse się wywala.

Szybka odpowiedź

Większość błędów JSON wynika z ścisłej składni: przecinki końcowe, apostrofy, nazwy właściwości bez cudzysłowów, brakujące przecinki, niedopasowane nawiasy, złe escape’y albo komentarze.

JSON wygląda jak obiekt JavaScript, ale jest surowszy. Nazwy właściwości i łańcuchy potrzebują podwójnych cudzysłowów.

Jeśli widzisz „Unexpected token”, wskazany znak może być miejscem, w którym parsowanie padło — niekoniecznie początkiem błędu.

Twój JSON jest oznaczony jako niepoprawny. To zwykle drobiazg składni, nie zepsuty format. Siedem pomyłek poniżej powoduje większość Unexpected token.

Dlaczego JSON tak łatwo się psuje?

JSON to format danych o ścisłej składni. Literał obiektu JavaScript może wyglądać podobnie i nadal być niepoprawnym JSON-em. W standardowym JSON nazwy i łańcuchy idą w podwójnych cudzysłowach, przecinki końcowe są niedozwolone, a komentarze nie wchodzą w format.

1. Przecinki końcowe (trailing commas)

Dodatkowy przecinek po ostatniej właściwości to problem. Standardowy JSON go nie dopuszcza.

Niepoprawne

{
  "name": "Alex",
  "age": 30,
}

Poprawne

{
  "name": "Alex",
  "age": 30
}

Ta sama reguła dotyczy tablic. Usuń przecinek po ostatnim elemencie.

Niepoprawne

[
  "red",
  "green",
]

Poprawne

[
  "red",
  "green"
]

2. Apostrofy zamiast podwójnych cudzysłowów

JavaScript często przyjmuje apostrofy. JSON nie. Nazwy właściwości i wartości łańcuchowe muszą używać podwójnych cudzysłowów.

Niepoprawne

{
  'name': 'Alex'
}

Poprawne

{
  "name": "Alex"
}

3. Nazwy właściwości bez cudzysłowów

W JavaScript czasem możesz napisać name bez cudzysłowów. W JSON każda nazwa właściwości musi być łańcuchem w podwójnych cudzysłowach.

Niepoprawne

{
  name: "Alex",
  age: 30
}

Poprawne

{
  "name": "Alex",
  "age": 30
}

4. Brakujące przecinki między wartościami

Między właściwościami i elementami tablicy potrzebny jest przecinek. Parser może zgłosić Unexpected token przy następnym cudzysłowie lub klamrze, nie przy brakującym przecinku.

Niepoprawne

{
  "name": "Alex"
  "age": 30
}

Poprawne

{
  "name": "Alex",
  "age": 30
}

5. Brakujące lub zbędne nawiasy

Obiekty używają { }. Tablice używają [ ]. Zagnieżdżony JSON pada, gdy brakuje ], zostaje zbędne } albo oba są zamienione. Policz pary otwierające i zamykające.

Niepoprawne

{
  "items": [1, 2
}

Poprawne

{
  "items": [1, 2]
}

6. Niepoprawne sekwencje escape

W łańcuchu JSON backslash zaczyna escape. Sekwencje ", \ i \n są poprawne. Ścieżka Windows zapisana jako C:\Users nie: \U nie jest legalnym escape’em JSON. Podwój backslashe albo parser zatrzyma się na tym znaku.

Niepoprawne

{"file":"C:\Users\Alex"}

Poprawne

{"file":"C:\\Users\\Alex"}

7. Komentarze w JSON

Standardowy JSON nie ma komentarzy. Niektóre narzędzia konfiguracji przyjmują // lub /* */ (JSONC, JSON5 i podobne). To nie jest standardowy JSON, a JSON.parse to odrzuci.

Niepoprawne

{
  // user name
  "name": "Alex"
}

Co znaczy „Unexpected token”?

Parser natrafił na niedozwolony znak w tym miejscu. Wskazany punkt to miejsce, w którym czytanie się zatrzymało. Jeśli wcześniej pominąłeś przecinek, błąd może wskazać cudzysłów następnej właściwości. Brzmienie zależy od runtime’u; nie oczekuj tego samego zdania w każdej przeglądarce.

Co znaczy „Unexpected end of JSON input”?

Tekst skończył się, zanim wartość była kompletna. Typowe przyczyny: brak } lub ], obcięte wejście, puste body albo ucięta odpowiedź API. To nie jeden konkretny błąd.

Dlaczego JSON.parse() się wywala?

JSON.parse() przyjmuje tylko poprawny tekst JSON. To się udaje:

const text = '{"name":"Alex"}';
const data = JSON.parse(text);

To pada, bo apostrofy to nie JSON:

const text = "{'name':'Alex'}";
JSON.parse(text);

Dokładny komunikat zależy od runtime’u JavaScript. Traktuj go jako wskazówkę i sprawdź przecinki, cudzysłowy i nawiasy w pobliżu tej pozycji.

JSON to nie to samo co obiekt JavaScript

Literał obiektu JavaScript może wyglądać jak { name: 'Alex' }. Poprawny JSON musi wyglądać jak { "name": "Alex" }: nazwy i łańcuchy w podwójnych cudzysłowach, bez przecinka końcowego, bez komentarzy.

  • Tekst JSON
  • Parser czyta tokeny
  • Poprawne dane albo Unexpected token
Znacznik błędu to miejsce, w którym parsowanie stanęło; może być po właściwej pomyłce.

Jak szybko znaleźć błąd JSON

Idź w tej kolejności. Nie zaczynaj od przepisywania całego pliku.

  1. Puść JSON przez walidator.
  2. Przeczytaj pierwszy zgłoszony błąd.
  3. Spójrz trochę przed wskazaną pozycją.
  4. Sprawdź przecinki, zwłaszcza końcowe i brakujące.
  5. Sprawdź cudzysłowy: tylko podwójne.
  6. Dopasuj { } i [ ].
  7. Sprawdź escape’y z backslashem w łańcuchach.
  8. Usuń komentarze, jeśli potrzebujesz ścisłego JSON.

Szybka mapa typowych poprawek:

Problem Poprawka
Przecinek końcowyUsuń przecinek po ostatnim elemencie.
ApostrofyUżyj podwójnych cudzysłowów przy nazwach i łańcuchach.
Klucz bez cudzysłowówOtocz nazwę właściwości podwójnymi cudzysłowami.
Brakujący przecinekWstaw przecinek między właściwościami lub elementami.
Brakujący nawiasZamknij każdą parę { } i [ ].
Zły escapeUżyj legalnego escape’u albo podwój backslashe w ścieżkach.
KomentarzUsuń // i /* */ dla standardowego JSON.

Walidacja i formatowanie JSON w przeglądarce

NEXNARA Formatowanie i porównywanie JSON może sprawdzić JSON na tym urządzeniu.

Możesz walidować, formatować 2 spacjami, 4 spacjami lub tabulatorami, minifikować, porównać dwa dokumenty (JSON Diff) i otworzyć plik .json. Parsowanie używa JSON.parse w przeglądarce, nie eval.

Dokumenty powyżej 5 MB mogą działać wolno. Tekst powyżej 15 MB nie jest przetwarzany w przeglądarce, żeby strona została responsywna.

Przetwarzanie JSON odbywa się w przeglądarce. To narzędzie nie wysyła tekstu na serwer NEXNARA. Reklamy i inne funkcje witryny nadal używają sieci; to osobna sprawa od przetwarzania.

Chcesz sprawdzić niepoprawny JSON? Otwórz Formatowanie i porównywanie JSON i wklej tekst.

FAQ

Dlaczego mój JSON mówi „Unexpected token”?

Parser natrafił na niedozwolony znak w tym miejscu. Właściwa pomyłka — często brakujący przecinek albo apostrof — może siedzieć tuż przed.

Czy przecinki końcowe są dozwolone w JSON?

Nie. Standardowy JSON nie pozwala na przecinek po ostatniej właściwości lub elemencie tablicy. Literały obiektów JavaScript często tak.

Czy JSON może używać apostrofów?

Nie. Nazwy właściwości i łańcuchy muszą używać podwójnych cudzysłowów.

Czy JSON może zawierać komentarze?

Nie w standardowym JSON. Niektóre narzędzia przyjmują JSONC lub JSON5 z komentarzami; JSON.parse i tak je odrzuci.

Dlaczego JSON.parse() się wywala?

Łańcuch nie jest poprawnym JSON-em. Typowe przyczyny: przecinki końcowe, apostrofy, klucze bez cudzysłowów, komentarze albo ucięta wartość. Dokładny komunikat zależy od runtime’u.

Jak sprawdzić, czy JSON jest poprawny?

Wklej go do walidatora takiego jak Formatowanie i porównywanie JSON albo wywołaj JSON.parse w konsoli. Jeśli parsowanie rzuca wyjątek, tekst nie jest poprawnym JSON-em.