Tech Help
Pse JSON.parse thotë "Unexpected token"?
JSON.parse hedh Unexpected token kur teksti nuk është JSON i vlefshëm. Ndreqni thonjëza të vetme, presje në fund, përgjigje HTML dhe pozicionin e gabimit.
JSON.parse() hedh SyntaxError kur hyrja nuk është JSON i vlefshëm. «Unexpected token» zakonisht do të thotë se analizuesi arriti te një shenjë që nuk lejohet në atë pikë të strukturës.
Shkaqet e zakonshme përfshijnë thonjëza të vetme, presje në fund, emra vetish pa thonjëza, escape të gabuar të vargut, tekst shtesë rreth JSON, ose analizimin e HTML apo një trupi tjetër jo-JSON si JSON.
Formulimi i saktë i gabimit ndryshon sipas motorit JavaScript dhe shfletuesit. Mos supozoni se çdo mjedis ekzekutimi shtyp «Unexpected token X in JSON at position N».
Kjo është diagnostikimi i Unexpected token në JSON.parse: çfarë do të thotë gabimi, si të lexoni pozicionin dhe çfarë të bëni kur trupi është HTML. Mbulimi më i gjerë i presjes në fund, thonjëzave dhe Unexpected end është te Gabime të zakonshme JSON: presje në fund, thonjëza dhe Unexpected token.
Çfarë do të thotë “Unexpected token” te JSON.parse()?
JSON.parse() kërkon gramatikën JSON. Një shenjë e paligjshme në pozicionin aktual hedh SyntaxError. {“name”:“Alex”,} është i pavlefshëm: pas asaj presjeje objekti nuk mund të mbyllet. Teksti i mesazhit dhe pozicioni ende ndryshojnë sipas runtime.
Çfarë gabimi hedh JSON.parse()?
JSON i pavlefshëm zakonisht hedh SyntaxError. Regjistroni error.name për të konfirmuar llojin. Mos e kodoni të plotë error.message: motorët dhe versionet e formulojnë ndryshe.
try {
JSON.parse('{"name":"Alex",}');
} catch (error) {
console.log(error.name);
// SyntaxError
}
1. Përdorimi i thonjëzave të vetme në vend të të dyfishtave
{‘name’:‘Alex’} është JSON i pavlefshëm. {“name”:“Alex”} është i vlefshëm. Vargjet JSON dhe emrat e anëtarëve të objektit përdorin thonjëza të dyfishta. Një literal objekti JavaScript si const user = { name: ‘Alex’ } mund të jetë JavaScript i ligjshëm dhe prapë të mos jetë tekst JSON.
I pavlefshëm
{'name':'Alex'}
I vlefshëm
{"name":"Alex"}
2. Presjet në fund
Një presje pas vetisë ose elementit të fundit të vargut nuk është JSON standard i vlefshëm. {“name”:“Alex”,“age”:30,} dhe [1, 2, 3,] dështojnë të dyja. Trajtojeni si një shkak të Unexpected token; Gabime të zakonshme JSON: presje në fund, thonjëza dhe Unexpected token i mbulon presjet në fund më thellë.
I pavlefshëm
{
"name": "Alex",
"age": 30,
}
I vlefshëm
{
"name": "Alex",
"age": 30
}
[1, 2, 3,]
3. Emra vetish pa thonjëza
{ name: “Alex” } mund të jetë literal objekti JavaScript. Në JSON, emrat e anëtarëve të objektit janë vargje dhe duan thonjëza të dyfishta: {“name”:“Alex”}.
I pavlefshëm
{
name: "Alex"
}
I vlefshëm
{
"name": "Alex"
}
4. Escape i pavlefshëm i vargut
Në tekstin JSON një shirit i përmbysur nis një escape. Një shteg i papërpunuar si C:\Users\Alex është i pavlefshëm sepse \U nuk është escape i ligjshëm. Dyfishoni shiritat e përmbysur. Mos e përzieni escapen e gjuhës-pritëse me escapen JSON. Gabime të zakonshme JSON: presje në fund, thonjëza dhe Unexpected token e mbulon këtë më thellë.
I pavlefshëm
{"file":"C:\Users\Alex"}
I vlefshëm
{"file":"C:\\Users\\Alex"}
5. Tekst shtesë para ose pas JSON
JSON.parse pret një vlerë të vetme JSON. Një parashtesë si Success: para {“ok”:true}, ose një prapashtesë si done pas saj, e bën të gjithë vargun të pavlefshëm. Hapësira e parëndësishme rreth një vlere të vetme JSON lejohet. JSON nuk ndalon hapësira para ose pas vlerës.
Success:
{"ok":true}
{"ok":true}
done
6. Analizimi i HTML në vend të JSON
Thirrja e response.json() mbi një faqe HTML është rast i zakonshëm i Unexpected token. Endpointet e gabuara, faqet HTML 404 ose 500, ridrejtimet e hyrjes, trupat e ndërmjetësve dhe faqet rezervë shpesh nisin me shënime. «Unexpected token < gjithmonë do të thotë HTML» është shumë e fortë: < është gjurmë, jo provë.
fetch('/api/data')
.then(response => response.json())
Çfarë do të thotë zakonisht “Unexpected token <”?
Vlerat JSON zakonisht nuk nisin me <. Nëse trupi fillon me ose , < mund të jetë shenja e parë e paligjshme. Gjatë diagnostikimit vendor, kontrolloni statusin HTTP, Content-Type dhe trupin e papërpunuar. Formulimi i motorit ende ndryshon.
Kontrolloni përgjigjen para se ta analizoni
Trupi i fetch mund të konsumohet vetëm një herë. Gjatë diagnostikimit vendor, lexoni së pari text(), shqyrtoni një parashtesë të shkurtër, pastaj JSON.parse të të njëjtit varg. Mos thirrni response.json() dhe pastaj response.text() mbi të njëjtën përgjigje. Mos i regjistroni si parazgjedhje ngarkesat e ndjeshme të prodhimit.
const response = await fetch(url);
const text = await response.text();
console.log(response.status);
console.log(response.headers.get("content-type"));
console.log(text.slice(0, 200));
try {
const data = JSON.parse(text);
console.log(data);
} catch (error) {
console.error("Invalid JSON:", error);
}
Çfarë do të thotë “at position 123”?
Disa motorë raportojnë një pozicion, rresht ose kolonë. Kërkoni pranë një thonjëze, presjeje, kllape ose escape të gabuar. Ai tregues është vendi ku analizimi vuri re një problem; shkaku i vërtetë mund të jetë më herët. Nuk garantohet se është shenja e saktë e dëmtuar.
Unexpected token kundrejt Unexpected end
Unexpected token do të thotë se analizuesi takoi një shenjë që nuk e priste. Unexpected end mund të shfaqet kur hyrja ndalet para se vlera të jetë e plotë, si te {“name”:“Alex” pa kllapën mbyllëse. Formulimi i saktë varet nga motori. Gabime të zakonshme JSON: presje në fund, thonjëza dhe Unexpected token e mbulon JSON e paplotë më gjerë.
{"name":"Alex"
JSON nuk është i njëjtë me një literal objekti JavaScript
JSON është format të dhënash. Një literal objekti JavaScript është sintaksë JavaScript. Objekti JS me çelësa pa thonjëza, thonjëza të vetme dhe presje në fund nuk është tekst JSON i vlefshëm. JSON.parse nuk mund të analizojë në mënyrë të sigurt literalet e objekteve JavaScript.
const data = {
name: 'Alex',
active: true,
};
{
"name": "Alex",
"active": true
}
A mund të përmbajë JSON komente?
JSON standard nuk mbështet komentet. Një rresht // brenda një objekti është i pavlefshëm. JSON5 dhe zgjerime të ngjashme janë formate të tjera. Formatim dhe krahasim JSON vërteton JSON standard me JSON.parse dhe nuk e trajton JSON5 si JSON.
{
// user name
"name": "Alex"
}
A janë undefined, NaN dhe Infinity JSON i vlefshëm?
Jo. Vlerat JSON janë objekt, listë, varg, numër, true, false dhe null. undefined, NaN dhe Infinity nuk janë. Një vlerë në nivelin e sipërm s’ka nevojë të jetë objekt ose listë: true, 123, “hello” dhe null janë JSON i vlefshëm.
{"a":undefined}
{"a":NaN}
{"a":Infinity}
true
123
"hello"
null
Si ta ndreqni një gabim Unexpected token hap pas hapi
Punoni burimin, jo vargun e gabimit:
- Konfirmoni se hyrja është vërtet JSON, jo HTML, regjistra ose JavaScript.
- Shqyrtoni shenjat e para të hyrjes së papërpunuar.
- Nëse erdhi nga një API, kontrolloni statusin HTTP dhe Content-Type. As 200 as application/json nuk garantojnë JSON të vlefshëm.
- Vërtetoni sintaksën në një analizues JSON.
- Përdorni çdo pozicion, rresht ose kolonë të raportuar si gjurmë, jo si shkakun e garantuar rrënjësor.
- Kontrolloni thonjëzat, presjet, kllapat, kllapat katrore dhe escapet pranë asaj zone.
- Krahasoni me një kopje të formatuar dhe të vërtetuar.
- Ndreqni serializuesin ose endpointin. Mos e fshini rastësisht tokenin e raportuar.
Një zëvendësim global i ' me " mund të prishë apostrofet brenda vargjeve, tekstin tashmë të escapeuar dhe burimet që nuk janë JSON. Prodhoni JSON të vlefshëm nga serializuesi i vërtetë. Mos e trajtoni eval si analizues JSON.
Përdorni JSON.stringify() kur prodhoni JSON në JavaScript
Preferoni JSON.stringify sesa bashkimin e vargjeve me dorë. Lëshon tekst JSON të vlefshëm për vlerat që serializon. Nuk ruan çdo vlerë JavaScript: undefined, funksionet dhe simbolet kanë sjellje të veçantë. Ai hollësi është jashtë fushës këtu.
const data = {
name: "Alex",
active: true
};
const json = JSON.stringify(data);
// {"name":"Alex","active":true}
JSON i pavlefshëm kundrejt një ndreqjeje të vërtetë
Këto çifte u kontrolluan me JSON.parse. Për HTML, ndreqja është përgjigja, jo një ndryshim sintakse.
| Problemi | I pavlefshëm | Ndreqja |
|---|---|---|
| Thonjëza të vetme | {'a':1} |
{"a":1} |
| Presje në fund | {"a":1,} |
{"a":1} |
| Çelës pa thonjëza | {a:1} |
{"a":1} |
| undefined | {"a":undefined} |
{"a":null} |
| Trup HTML | <html>... |
Kontrolloni endpointin dhe përgjigjen e papërpunuar. Mos e redaktoni HTML që të bëhet JSON. |
Një udhëzues i thjeshtë vendimi për Unexpected token
Nëse JSON.parse dështoi, vendosni nëse keni fare JSON para se të rishkruani thonjëzat.
- JSON.parse dështoi
- Nga një API? Kontrolloni statusin, Content-Type dhe trupin e papërpunuar
- A fillon si JSON? Nëse jo, ndreqni burimin ose endpointin
- Nëse po, vërtetoni thonjëzat, presjet, kllapat, kllapat katrore, escapet, vlerat e pambështetura
- Përdorni pozicionin e raportuar si gjurmë
- Ndreqni burimin, pastaj analizoni sërish
Vërtetoni JSON para se ta analizoni ose ta përdorni
NEXNARA Formatim dhe krahasim JSON vërteton JSON në shfletues me JSON.parse—jo eval.
Vërtetim, formatim i bukur me 2 hapësira, 4 hapësira ose tabulime, minify, kopjim, shkarkim dhe ngarkim .json. JSON Diff mbulon objekte dhe vargje të folezuara, shtigje, përmbledhje, filtra dhe shkëmbim. Pas analizimit, kopjet e formatuara bukur dhe minify të të njëjtave të dhëna krahasohen si të barabarta; çelësat e objektit krahasohen sipas emrit.
Teksti më i madh se 5 MB mund të ndihet i ngadaltë. Teksti më i madh se 15 MB nuk përpunohet në shfletues.
Vërtetimi dhe formatimi i JSON ndodhin në shfletuesin tuaj. Ky mjet nuk e dërgon JSON te një server NEXNARA. Reklamat dhe veçoritë e tjera të sajtit ende përdorin rrjetin.
Ngjitni vargun që dështon te Formatim dhe krahasim JSON dhe lexoni shenjat e para para se të rishkruani thonjëzat.
FAQ
Pse JSON.parse thotë Unexpected token?
Teksti nuk është JSON i vlefshëm në pikën ku u ndal analizuesi. Shkaqet tipike janë thonjëzat, presjet, teksti shtesë ose një trup jo-JSON si HTML.
Çfarë do të thotë Unexpected token < in JSON?
Shenja e parë e paligjshme mund të jetë <. Kjo shpesh tregon një faqe HTML, por nuk është provë e një 404 as e HTML në çdo rast. Kontrolloni statusin, Content-Type dhe trupin e papërpunuar.
Si e gjej pozicionin e gabimit në JSON?
Nëse motori raporton një pozicion, rresht ose kolonë, shikoni pranë. Gabimi i vërtetë mund të jetë më herët. Përdoreni si gjurmë, pastaj vërtetoni.
A mund të përdorë JSON thonjëza të vetme?
Jo. Në JSON standard, vargjet dhe emrat e anëtarëve përdorin thonjëza të dyfishta.
A mund të ketë JSON presje në fund?
Jo. JSON standard nuk lejon një presje pas vetisë ose elementit të fundit të vargut.
Si ta kontrolloj nëse një varg është JSON i vlefshëm?
Thirrni JSON.parse në një try/catch, ose ngjitni tekstin te Formatim dhe krahasim JSON. Nëse analizimi hedh SyntaxError, vargu nuk është JSON i vlefshëm.