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 қатесін қадамдап қалай түзету

Қате жолымен емес, дереккөзбен жұмыс істеңіз:

  1. Кірістің шынымен JSON екенін растаңыз, HTML, журналдар немесе JavaScript емес.
  2. Шикі кірістің алғашқы таңбаларын қараңыз.
  3. API-ден келсе, HTTP күйі мен Content-Type тексеріңіз. Не 200, не application/json жарамды JSON кепілдемейді.
  4. Синтаксисті JSON талдауышында тексеріңіз.
  5. Хабарланған орын, жол немесе бағанды тұспал ретінде пайдаланыңыз, кепілді түбір себеп ретінде емес.
  6. Сол аймақ маңында тырнақша, үтір, жақша, тік жақша және escape-терді тексеріңіз.
  7. Пішімделген, тексерілген көшірмемен салыстырыңыз.
  8. Сериализаторды немесе endpoint-ті түзетіңіз. Хабарланған токенді кездейсоқ жоймаңыз.
JSON-ды кездейсоқ тырнақша алмастырумен «түзетпеңіз»

'-ні "-ке жаһандық алмастыру жол ішіндегі апострофтарды, қазірдің өзінде 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, қолдаусыз мәндерді тексеріңіз
  • Хабарланған орынды тұспал ретінде пайдаланыңыз
  • Дереккөзді түзетіңіз, содан кейін қайта талдаңыз
Unexpected token тосынды атайды. Мәтін дереккөзі көбіне шынайы түзету.

Талдау немесе пайдаланудан бұрын 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 емес.

Tech Help

Жиі JSON қателері: соңғы үтір, тырнақша және Unexpected token

Жарамсыз JSON-ды түзетіңіз: соңғы үтір, жалғыз тырнақша, тырнақшасыз кілттер және Unexpected token. JSON.parse неге сәтсіз және JSON-ды қалай тексеру.

Tech Help

Скриншоттар үшін JPG vs PNG: қайсысы кіші?

Скриншот үшін мазмұнға қарай JPG не PNG таңдаңыз: UI мен мәтін жиі PNG-де өткір қалады; фото көп кадрлар JPEG-де кішірек болуы мүмкін.

Tech Help

Суретті бұлыңғыр қылмай файл өлшемін қалай азайтуға болады

Көрнекі сапаны қолайлы сақтай отырып фото мен сурет файлдарын кішірейтіңіз. Алдымен артық өлшемдерді өзгертіңіз, содан кейін қалыпты қысыңыз да сай пішім таңдаңыз.

Tech Help

Unix Timestamp-тен күнге: секунд, миллисекунд және UTC түсіндірмесі

Unix timestamp-ті күнге түрлендіріңіз. Секунд пен миллисекунд, UTC пен жергілікті уақыт, ISO 8601 және күнді epoch уақытына қалай қайтару керектігін қараңыз.

Tech Help

Base64 файлдарды неге үлкейтеді?

Base64 әдетте екілік деректерді шамамен үштен бірге үлкейтеді. 3 байттан 4 таңбаға құрылымды, толтыруды, Data URL қосымша шығынын және бұл өлшем қашан тұратынын көріңіз.