Tech Help

Česte JSON greške: završni zarez, navodnici i Unexpected token

Ispravite nevažeći JSON: završni zarez, jednostruki navodnici, ključevi bez navodnika i Unexpected token. Zašto JSON.parse ne uspijeva i kako provjeriti JSON.

Brzi odgovor

Većina JSON grešaka dolazi od strogih pravila: završni zarez, jednostruki navodnici, imena svojstava bez navodnika, nedostajući zarez, neupareni zagradi, neispravan escape ili komentari.

JSON liči na JavaScript objekat, ali je stroži. Imena svojstava i stringovi trebaju dvostruke navodnike.

Ako vidite Unexpected token, prijavljeni znak može biti mjesto gdje se parsiranje zaustavilo—ne nužno gdje je prvobitna greška počela.

Vaš JSON je označen kao nevažeći. Obično je sitna sintaksna greška, ne pokvaren format datoteke. Sedam grešaka ispod izaziva većinu Unexpected token.

Zašto se JSON tako lako pokvari?

JSON je format podataka sa strogom sintaksom. Literal JavaScript objekta može izgledati slično i ipak biti nevažeći JSON. U standardnom JSON imena svojstava i stringovi trebaju dvostruke navodnike, završni zarez nije dozvoljen, a komentari nisu dio formata.

1. Završni zarezi

Višak zareza poslije posljednjeg svojstva je problem. Standardni JSON to ne dozvoljava.

Nevažeće

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

Važeće

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

Isto pravilo važi za nizove. Uklonite zarez poslije posljednje stavke.

Nevažeće

[
  "red",
  "green",
]

Važeće

[
  "red",
  "green"
]

2. Jednostruki umjesto dvostrukih navodnika

JavaScript često prihvata jednostruke navodnike. JSON ne. Imena svojstava i vrijednosti stringova moraju koristiti dvostruke navodnike.

Nevažeće

{
  'name': 'Alex'
}

Važeće

{
  "name": "Alex"
}

3. Imena svojstava bez navodnika

U JavaScriptu ponekad možete napisati name bez navodnika. U JSON svako ime svojstva mora biti string s dvostrukim navodnicima.

Nevažeće

{
  name: "Alex",
  age: 30
}

Važeće

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

4. Nedostajući zarezi između vrijednosti

Svojstva i stavke niza trebaju zarez između. Parser može prijaviti Unexpected token na sljedećem navodniku ili zagradi, ne na samom nedostajućem zarezu.

Nevažeće

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

Važeće

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

5. Nedostajuće ili višak zagrada

Objekti koriste { }. Nizovi koriste [ ]. Ugniježđeni JSON često padne kad fali ], ima višak } ili su zamijenjeni. Brojite parove otvaranja i zatvaranja.

Nevažeće

{
  "items": [1, 2
}

Važeće

{
  "items": [1, 2]
}

6. Neispravne escape sekvence

Unutar JSON stringa, obrnuta kosa crta počinje escape. Sekvence kao ", \ i \n su važeće. Windows putanja C:\Users nije: \U nije zakonit JSON escape. Udvostručite obrnute crte, inače parser staje na tom znaku.

Nevažeće

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

Važeće

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

7. Komentari unutar JSON

Standardni JSON nema komentare. Neki alati za konfiguraciju prihvataju // ili /* */ (JSONC, JSON5 i slično). To nije standardni JSON, i JSON.parse će odbiti.

Nevažeće

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

Šta znači Unexpected token?

Parser je sreo znak koji nije dozvoljen na toj poziciji. Prijavljeno mjesto je gdje je čitanje stalo. Ako ste ranije izostavili zarez, greška može pokazivati na navodnik sljedećeg svojstva. Formulacija zavisi od izvršnog okruženja; ne očekujte da svaki preglednik štampa istu rečenicu.

Šta znači Unexpected end of JSON input?

Tekst je završio prije nego što je vrijednost bila kompletna. Tipični uzroci: nedostaje } ili ], odsječen unos, prazno tijelo ili prekinut API odgovor. Nije jedna jedina greška.

Zašto JSON.parse() ne uspijeva?

JSON.parse() prima samo važeći JSON tekst. Ovo uspijeva:

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

Ovo ne uspijeva, jer jednostruki navodnici nisu JSON:

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

Tačna poruka greške zavisi od JavaScript izvršnog okruženja. Tretirajte poruku kao nagovještaj, pa provjerite zareze, navodnike i zagrade blizu te pozicije.

JSON nije isto što i JavaScript objekat

Literal JavaScript objekta može izgledati kao { name: 'Alex' }. Važeći JSON mora izgledati kao { "name": "Alex" }: imena i stringovi s dvostrukim navodnicima, bez završnog zareza, bez komentara.

  • JSON tekst
  • Parser čita tokene
  • Važeći podaci ili Unexpected token
Oznaka greške je gdje se parsiranje zaustavilo, što može biti poslije prave greške.

Kako brzo naći JSON grešku

Radite ovim redom. Nemojte počinjati prepisivanjem cijele datoteke.

  1. Proterajte JSON kroz validator.
  2. Pročitajte prvu prijavljenu grešku.
  3. Pogledajte malo prije prijavljene pozicije.
  4. Provjerite zareze, posebno završne i nedostajuće.
  5. Provjerite navodnike: samo dvostruki.
  6. Uparite { } i [ ].
  7. Provjerite escape obrnute kose crte u stringovima.
  8. Uklonite komentare ako trebate strogi JSON.

Brza mapa uobičajenih ispravki:

Problem Ispravka
Završni zarezObrišite zarez poslije posljednje stavke.
Jednostruki navodniciKoristite dvostruke navodnike za imena i stringove.
Ključ bez navodnikaObavijte ime svojstva dvostrukim navodnicima.
Nedostajući zarezStavite zarez između svojstava ili stavki niza.
Nedostajuća zagradaZatvorite svaki par { } i [ ].
Neispravan escapeKoristite zakonit escape, ili udvostručite obrnute crte u putanjama.
KomentarUklonite // i /* */ za standardni JSON.

Provjerite i formatirajte JSON u pregledniku

NEXNARA Formatiranje i poređenje JSON-a može provjeriti JSON na ovom uređaju.

Možete validirati, urediti s 2 razmaka, 4 razmaka ili tabulatorom, minify, uporediti dva dokumenta (JSON Diff) i otvoriti .json datoteku. Parsiranje koristi JSON.parse u pregledniku, ne eval.

Dokumenti veći od 5 MB mogu djelovati sporo. Tekst veći od 15 MB se ne obrađuje u pregledniku, da stranica ostane odzivna.

Sama obrada JSON dešava se u vašem pregledniku. Tekst se za ovaj alat ne šalje na NEXNARA server. Reklame i druge funkcije sajta i dalje koriste mrežu; to je odvojeno od obrade.

Trebate provjeriti nevažeći JSON? Otvorite Formatiranje i poređenje JSON-a i zalijepite tekst.

FAQ

Zašto moj JSON kaže Unexpected token?

Parser je naišao na znak koji tamo nije dozvoljen. Prava greška—često nedostajući zarez ili jednostruki navodnik—može sjediti tik prije te pozicije.

Da li su završni zarezi dozvoljeni u JSON?

Ne. Standardni JSON ne dozvoljava zarez poslije posljednjeg svojstva ili stavke niza. Literali JavaScript objekata često dozvoljavaju.

Može li JSON koristiti jednostruke navodnike?

Ne. Imena svojstava i stringovi moraju koristiti dvostruke navodnike.

Može li JSON sadržavati komentare?

Ne u standardnom JSON. Neki alati prihvataju JSONC ili JSON5 s komentarima; JSON.parse ih i dalje odbija.

Zašto JSON.parse() ne uspijeva?

String nije važeći JSON. Tipični uzroci su završni zarez, jednostruki navodnici, ključevi bez navodnika, komentari ili odsječena vrijednost. Tačna poruka zavisi od izvršnog okruženja.

Kako da provjerim da li je JSON važeći?

Zalijepite ga u validator kao Formatiranje i poređenje JSON-a, ili pozovite JSON.parse u konzoli. Ako parsiranje baci izuzetak, tekst nije važeći JSON.