Tech Help
JSON.parse неге "Unexpected token" дейді?
JSON.parse мәтін жарамды JSON болмағанда Unexpected token лақтырады. Жалғыз тырнақша, соңғы үтір, HTML жауаптары мен қате орнын жөндеңіз.
JSON.parse() кіріс жарамды JSON болмаса SyntaxError лақтырады. “Unexpected token” әдетте талдауыш құрылымның сол нүктесінде рұқсат етілмеген таңбаға жеткенін білдіреді.
Жиі себептер: жалғыз тырнақша, соңғы үтір, тырнақшасыз қасиет аттары, қате жол escape, JSON айналасындағы артық мәтін, немесе HTML не басқа JSON емес денені JSON деп талдау.
Қатенің дәл тұжырымы JavaScript қозғалтқышы мен браузерге қарай өзгереді. Әр runtime «Unexpected token X in JSON at position N» басады деп жорамалдамаңыз.
Бұл JSON.parse кезінде Unexpected token жөндеу: қате нені білдіреді, орынды қалай оқу, дене HTML болса не істеу. Соңғы үтір, тырнақша және Unexpected end кеңірек Жиі JSON қателері: соңғы үтір, тырнақша және Unexpected token-те.
JSON.parse()-те “Unexpected token” нені білдіреді?
JSON.parse() JSON грамматикасын талап етеді. Ағымдағы орындағы заңсыз таңба SyntaxError лақтырады. {“name”:“Alex”,} жарамсыз: сол үтірден кейін нысан біте алмайды. Хабар мәтіні мен орын әлі runtime-ға қарай өзгереді.
JSON.parse() қандай қате лақтырады?
Жарамсыз JSON әдетте SyntaxError лақтырады. Түрін растау үшін error.name жазыңыз. Бүкіл error.message-ті қатырмаңыз: қозғалтқыштар мен нұсқалар әртүрлі тұжырымдайды.
try {
JSON.parse('{"name":"Alex",}');
} catch (error) {
console.log(error.name);
// SyntaxError
}
1. Қос орнына жалғыз тырнақша
{‘name’:‘Alex’} жарамсыз JSON. {“name”:“Alex”} жарамды. JSON жолдары мен нысан мүше аттары қос тырнақша қолданады. const user = { name: ‘Alex’ } сияқты JavaScript нысан литералы заңды JavaScript болуы мүмкін, бірақ әлі JSON мәтіні болмауы мүмкін.
Жарамсыз
{'name':'Alex'}
Жарамды
{"name":"Alex"}
2. Соңғы үтірлер
Соңғы қасиеттен немесе массив элементінен кейінгі үтір жарамды стандарт JSON емес. {“name”:“Alex”,“age”:30,} және [1, 2, 3,] екеуі де сәтсіз. Бұны Unexpected token себебі деп санаңыз; Жиі JSON қателері: соңғы үтір, тырнақша және Unexpected token соңғы үтірлерді тереңірек қамтиды.
Жарамсыз
{
"name": "Alex",
"age": 30,
}
Жарамды
{
"name": "Alex",
"age": 30
}
[1, 2, 3,]
3. Тырнақшасыз қасиет аттары
{ name: “Alex” } JavaScript нысан литералы болуы мүмкін. JSON-да мүше аттары жол және қос тырнақша керек: {“name”:“Alex”}.
Жарамсыз
{
name: "Alex"
}
Жарамды
{
"name": "Alex"
}
4. Жарамсыз жол escape
JSON мәтінінде кері қиғаш сызық escape бастайды. C:\Users\Alex сияқты шикі жол жарамсыз, себебі \U заңды escape емес. Кері қиғаш сызықтарды екі еселеңіз. Хост тілінің escape-ін JSON escape-імен араластырмаңыз. Жиі JSON қателері: соңғы үтір, тырнақша және Unexpected token бұны тереңірек қамтиды.
Жарамсыз
{"file":"C:\Users\Alex"}
Жарамды
{"file":"C:\\Users\\Alex"}
5. JSON-нан бұрын немесе кейін артық мәтін
JSON.parse бір JSON мәнін күтеді. {“ok”:true} алдындағы Success: префиксі немесе артындағы done суффиксі бүкіл жолды жарамсыз етеді. Жалғыз JSON мәні айналасындағы маңызсыз бос орын рұқсат етіледі. JSON мәннің алдында немесе артында бос орынға тыйым салмайды.
Success:
{"ok":true}
{"ok":true}
done
6. JSON орнына HTML талдау
HTML бетке response.json() шақыру жиі Unexpected token жағдайы. Қате endpoint-тер, 404 немесе 500 HTML беттері, кіру бағыттаулары, прокси денелері және қосалқы беттер көбіне белгілеумен басталады. «Unexpected token < әрқашан HTML» тым күшті: < тұспал, дәлел емес.
fetch('/api/data')
.then(response => response.json())
“Unexpected token <” әдетте нені білдіреді?
JSON мәндері әдетте < мен басталмайды. Дене немесе мен басталса, < бірінші заңсыз таңба болуы мүмкін. Жергілікті жөндеуде HTTP күйін, Content-Type және шикі денені қараңыз. Қозғалтқыш тұжырымы әлі өзгереді.
Талдаудан бұрын жауапты тексеріңіз
fetch денесі тек бір рет тұтынылады. Жергілікті жөндеуде алдымен text() оқыңыз, қысқа префиксті қараңыз, содан кейін сол жолға JSON.parse қолданыңыз. Бір жауапқа алдымен response.json(), кейін response.text() шақырмаңыз. Өндірістегі сезімтал жүктемелерді әдепкі бойынша жазбаңыз.
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);
}
“at position 123” нені білдіреді?
Кейбір қозғалтқыштар орын, жол немесе баған хабарлайды. Жақын жерде қате тырнақша, үтір, жақша немесе escape іздеңіз. Сол индекс талдау мәселені байқаған жер; шынайы себеп ертерек болуы мүмкін. Дәл ақаулы таңба екеніне кепілдік жоқ.
Unexpected token Unexpected end-ке қарсы
Unexpected token талдауыш күтпеген таңбаға кездескенін білдіреді. Unexpected end кіріс мән аяқталмай тоқтағанда пайда болуы мүмкін, мысалы {“name”:“Alex” жабу жақшасыз. Дәл тұжырым қозғалтқышқа байланысты. Жиі JSON қателері: соңғы үтір, тырнақша және Unexpected token толық емес JSON-ды кеңірек қамтиды.
{"name":"Alex"
JSON JavaScript нысан литералымен бірдей емес
JSON — дерек пішімі. JavaScript нысан литералы — JavaScript синтаксисі. Тырнақшасыз кілттері, жалғыз тырнақшасы және соңғы үтірі бар JS нысаны жарамды JSON мәтіні емес. JSON.parse JavaScript нысан литералдарын қауіпсіз талдай алмайды.
const data = {
name: 'Alex',
active: true,
};
{
"name": "Alex",
"active": true
}
JSON түсініктеме сақтай ала ма?
Стандарт JSON түсініктемелерді қолдамайды. Нысан ішіндегі // жолы жарамсыз. JSON5 және ұқсас кеңейтімдер басқа пішім. JSON пішімдеу / Diff стандарт JSON-ды JSON.parse-пен тексереді және JSON5-ті JSON деп санамайды.
{
// user name
"name": "Alex"
}
undefined, NaN және Infinity жарамды JSON ба?
Жоқ. JSON мәндері нысан, массив, жол, сан, true, false және null. undefined, NaN және Infinity емес. Жоғарғы деңгей мәні нысан немесе массив болуға міндетті емес: true, 123, “hello” және null жарамды JSON.
{"a":undefined}
{"a":NaN}
{"a":Infinity}
true
123
"hello"
null
Unexpected token қатесін қадамдап қалай түзету
Қате жолымен емес, дереккөзбен жұмыс істеңіз:
- Кірістің шынымен JSON екенін растаңыз, HTML, журналдар немесе JavaScript емес.
- Шикі кірістің алғашқы таңбаларын қараңыз.
- API-ден келсе, HTTP күйі мен Content-Type тексеріңіз. Не 200, не application/json жарамды JSON кепілдемейді.
- Синтаксисті JSON талдауышында тексеріңіз.
- Хабарланған орын, жол немесе бағанды тұспал ретінде пайдаланыңыз, кепілді түбір себеп ретінде емес.
- Сол аймақ маңында тырнақша, үтір, жақша, тік жақша және escape-терді тексеріңіз.
- Пішімделген, тексерілген көшірмемен салыстырыңыз.
- Сериализаторды немесе endpoint-ті түзетіңіз. Хабарланған токенді кездейсоқ жоймаңыз.
'-ні "-ке жаһандық алмастыру жол ішіндегі апострофтарды, қазірдің өзінде escape етілген мәтінді және JSON емес дереккөздерді бұзуы мүмкін. Жарамды JSON-ды нақты сериализатордан шығарыңыз. eval-ды JSON талдауышы деп санамаңыз.
JavaScript-те JSON шығарғанда JSON.stringify() пайдаланыңыз
Жолдарды қолмен жалғаудан JSON.stringify-ті артық көріңіз. Сериализациялайтын мәндер үшін жарамды JSON мәтінін шығарады. Әр JavaScript мәнін сақтамайды: undefined, функциялар және таңбалардың ерекше әрекеті бар. Бұл деталь мұнда қамтудан тыс.
const data = {
name: "Alex",
active: true
};
const json = JSON.stringify(data);
// {"name":"Alex","active":true}
Жарамсыз JSON шынайы түзетуге қарсы
Бұл жұптар JSON.parse-пен тексерілді. HTML үшін түзету — жауап, синтаксис өңдеу емес.
| Мәселе | Жарамсыз | Түзету |
|---|---|---|
| Жалғыз тырнақша | {'a':1} |
{"a":1} |
| Соңғы үтір | {"a":1,} |
{"a":1} |
| Тырнақшасыз кілт | {a:1} |
{"a":1} |
| undefined | {"a":undefined} |
{"a":null} |
| HTML денесі | <html>... |
Endpoint пен шикі жауапты тексеріңіз. HTML-ді JSON-ға өңдемеңіз. |
Unexpected token үшін қарапайым шешім нұсқаулығы
JSON.parse сәтсіз болса, тырнақшаларды қайта жазбас бұрын JSON бар ма, шешіңіз.
- JSON.parse сәтсіз болды
- API-ден бе? Күй, Content-Type және шикі денені тексеріңіз
- JSON-мен бастала ма? Жоқ болса, дереккөзді немесе endpoint-ті түзетіңіз
- Иә болса, тырнақша, үтір, жақша, тік жақша, escape, қолдаусыз мәндерді тексеріңіз
- Хабарланған орынды тұспал ретінде пайдаланыңыз
- Дереккөзді түзетіңіз, содан кейін қайта талдаңыз
Талдау немесе пайдаланудан бұрын JSON-ды тексеріңіз
NEXNARA JSON пішімдеу / Diff браузерде JSON-ды JSON.parse-пен тексереді—eval емес.
Тексеріңіз, 2 бос орын, 4 бос орын немесе қойындымен әдемілеңіз, minify, көшіріңіз, жүктеп алыңыз және .json жүктеңіз. JSON Diff кірістірілген нысан мен массивтерді, жолдарды, қорытындыны, сүзгілерді және ауыстыруды қамтиды. Талдаудан кейін бір деректердің әдемі және minify көшірмелері тең салыстырылады; нысан кілттері ат бойынша салыстырылады.
5 MB-тан үлкен мәтін баяу сезілуі мүмкін. 15 MB-тан үлкен мәтін браузерде өңделмейді.
JSON тексеру және пішімдеу браузеріңізде болады. Бұл құрал JSON-ды NEXNARA серверіне жібермейді. Жарнамалар мен сайттың басқа мүмкіндіктері әлі желі пайдаланады.
Сәтсіз жолды JSON пішімдеу / Diff ішіне қойыңыз және тырнақшаларды қайта жазбас бұрын алғашқы таңбаларды оқыңыз.
FAQ
JSON.parse неге Unexpected token дейді?
Мәтін талдауыш тоқтаған нүктеде жарамды JSON емес. Типтік себептер: тырнақша, үтір, артық мәтін немесе HTML сияқты JSON емес дене.
Unexpected token < in JSON нені білдіреді?
Бірінші заңсыз таңба < болуы мүмкін. Бұл жиі HTML бетке сілтейді, бірақ әр жағдайда 404 немесе HTML дәлелі емес. Күй, Content-Type және шикі денені тексеріңіз.
JSON-да қате орнын қалай табамын?
Қозғалтқыш орын, жол немесе баған хабарласа, жақын қараңыз. Шынайы қате ертерек болуы мүмкін. Тұспал ретінде пайдаланыңыз, содан кейін тексеріңіз.
JSON жалғыз тырнақша қолдана ала ма?
Жоқ. Стандарт JSON жолдары мен мүше аттары қос тырнақша қолданады.
JSON-да соңғы үтір бола ала ма?
Жоқ. Стандарт JSON соңғы қасиеттен немесе массив элементінен кейін үтірге рұқсат етпейді.
Жолдың жарамды JSON екенін қалай тексеремін?
try/catch ішінде JSON.parse шақырыңыз, немесе мәтінді JSON пішімдеу / Diff ішіне қойыңыз. Талдау SyntaxError лақтырса, жол жарамды JSON емес.