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.
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.
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
Kako brzo naći JSON grešku
Radite ovim redom. Nemojte počinjati prepisivanjem cijele datoteke.
- Proterajte JSON kroz validator.
- Pročitajte prvu prijavljenu grešku.
- Pogledajte malo prije prijavljene pozicije.
- Provjerite zareze, posebno završne i nedostajuće.
- Provjerite navodnike: samo dvostruki.
- Uparite { } i [ ].
- Provjerite escape obrnute kose crte u stringovima.
- Uklonite komentare ako trebate strogi JSON.
Brza mapa uobičajenih ispravki:
| Problem | Ispravka |
|---|---|
| Završni zarez | Obrišite zarez poslije posljednje stavke. |
| Jednostruki navodnici | Koristite dvostruke navodnike za imena i stringove. |
| Ključ bez navodnika | Obavijte ime svojstva dvostrukim navodnicima. |
| Nedostajući zarez | Stavite zarez između svojstava ili stavki niza. |
| Nedostajuća zagrada | Zatvorite svaki par { } i [ ]. |
| Neispravan escape | Koristite zakonit escape, ili udvostručite obrnute crte u putanjama. |
| Komentar | Uklonite // 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.