Tech Help

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

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

Қысқа жауап

Көп JSON қателері қатаң ережелерден келеді: соңғы үтір, жалғыз тырнақша, тырнақшасыз қасиет аттары, жоқ үтір, сәйкес келмейтін жақшалар, жарамсыз escape немесе түсініктемелер.

JSON JavaScript нысанына ұқсайды, бірақ қатаңырақ. Қасиет аттары мен жолдар қос тырнақшаны қажет етеді.

Unexpected token көрсеңіз, хабарланған таңба талдау тоқтаған жер болуы мүмкін—бастапқы қате басталған жер емес.

JSON-ыңыз жарамсыз деп белгіленген. Әдетте кіші синтаксис мәселесі, бұзылған файл пішімі емес. Төмендегі жеті қате көп Unexpected token тудырады.

JSON неге оңай сынады?

JSON — қатаң синтаксисті дерек пішімі. JavaScript нысан литералы ұқсас көрініп, әлі жарамсыз JSON болуы мүмкін. Стандарт JSON-да қасиет аттары мен жолдар қос тырнақшаны қажет етеді, соңғы үтір рұқсат етілмейді, түсініктемелер пішімнің бөлігі емес.

1. Соңғы үтірлер

Соңғы қасиеттен кейінгі қосымша үтір — мәселе. Стандарт JSON оны рұқсат етпейді.

Жарамсыз

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

Жарамды

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

Сол ереже массивтерге де қатысты. Соңғы элементтен кейін үтірді алып тастаңыз.

Жарамсыз

[
  "red",
  "green",
]

Жарамды

[
  "red",
  "green"
]

2. Қос орнына жалғыз тырнақша

JavaScript жиі жалғыз тырнақшаны қабылдайды. JSON қабылдамайды. Қасиет аттары мен жол мәндері қос тырнақша қолдануы керек.

Жарамсыз

{
  'name': 'Alex'
}

Жарамды

{
  "name": "Alex"
}

3. Тырнақшасыз қасиет аттары

JavaScript-те кейде name-ді тырнақшасыз жазуға болады. JSON-да әр қасиет аты қос тырнақшалы жол болуы керек.

Жарамсыз

{
  name: "Alex",
  age: 30
}

Жарамды

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

4. Мәндер арасында жоқ үтір

Қасиеттер мен массив элементтері арасында үтір керек. Талдауыш Unexpected token-ді келесі тырнақша немесе жақшада хабарлауы мүмкін, жоқ үтірдің өзінде емес.

Жарамсыз

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

Жарамды

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

5. Жоқ немесе артық жақшалар

Нысандар { } қолданады. Массивтер [ ]. Кірістірілген JSON жиі ] жоқ, } артық немесе екеуі ауыстырылғанда сәтсіз болады. Ашу және жабу жұптарын санаңыз.

Жарамсыз

{
  "items": [1, 2
}

Жарамды

{
  "items": [1, 2]
}

6. Жарамсыз escape тізбектері

JSON жолында кері қиғаш сызық escape бастайды. ", \ және \n сияқты тізбектер жарамды. C:\Users деп жазылған Windows жолы емес: \U заңды JSON escape емес. Кері қиғаш сызықтарды екі еселеңіз, әйтпесе талдауыш сол таңбада тоқтайды.

Жарамсыз

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

Жарамды

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

7. JSON ішіндегі түсініктемелер

Стандарт JSON-да түсініктеме жоқ. Кейбір баптау құралдары // немесе /* */ қабылдайды (JSONC, JSON5 және ұқсас). Бұл стандарт JSON емес, JSON.parse қабылдамайды.

Жарамсыз

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

Unexpected token нені білдіреді?

Талдауыш сол орында рұқсат етілмеген таңбаға кездесті. Хабарланған нүкте оқу тоқтаған жер. Ертерек үтір қалдырсаңыз, қате келесі қасиеттің тырнақшасына сілтеуі мүмкін. Тұжырым орындалу ортасына қарай өзгереді; әр браузер бір сөйлем басады деп күтпеңіз.

Unexpected end of JSON input нені білдіреді?

Мәтін мән аяқталмай бітті. Типтік себептер: жоқ } немесе ], кесілген енгізу, бос дене немесе үзілген API жауабы. Бір ғана қате емес.

JSON.parse() неге сәтсіз?

JSON.parse() тек жарамды JSON мәтінін қабылдайды. Бұл сәтті:

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

Бұл сәтсіз, себебі жалғыз тырнақша JSON емес:

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

Дәл қате хабарламасы JavaScript орындалу ортасына байланысты. Хабарламаны тұспал деп санаңыз, содан кейін сол орын маңындағы үтір, тырнақша және жақшаларды тексеріңіз.

JSON JavaScript нысанымен бірдей емес

JavaScript нысан литералы { name: 'Alex' } сияқты көрінуі мүмкін. Жарамды JSON { "name": "Alex" } сияқты көрінуі керек: қос тырнақшалы аттар мен жолдар, соңғы үтір жоқ, түсініктеме жоқ.

  • JSON мәтіні
  • Талдауыш токендерді оқиды
  • Жарамды дерек немесе Unexpected token
Қате белгісі — талдау тоқтаған жер, шынайы қатеден кейін болуы мүмкін.

JSON қатесін тез қалай табу

Осы ретпен жұмыс істеңіз. Бүкіл файлды қайта жазудан бастамаңыз.

  1. JSON-ды тексерушіден өткізіңіз.
  2. Бірінші хабарланған қатені оқыңыз.
  3. Хабарланған орыннан сәл бұрын қараңыз.
  4. Үтірлерді тексеріңіз, әсіресе соңғы және жоқтарды.
  5. Тырнақшаларды тексеріңіз: тек қос.
  6. { } және [ ] сәйкестендіріңіз.
  7. Жолдардағы кері қиғаш сызық escape-терін тексеріңіз.
  8. Қатаң JSON керек болса түсініктемелерді алып тастаңыз.

Әдеттегі түзетулердің жылдам картасы:

Мәселе Түзету
Соңғы үтірСоңғы элементтен кейін үтірді өшіріңіз.
Жалғыз тырнақшаАттар мен жолдар үшін қос тырнақша қолданыңыз.
Тырнақшасыз кілтҚасиет атын қос тырнақшаға ораңыз.
Жоқ үтірҚасиеттер немесе массив элементтері арасына үтір қойыңыз.
Жоқ жақшаӘр { } және [ ] жұбын жабыңыз.
Жарамсыз escapeЗаңды escape қолданыңыз немесе жолдардағы кері қиғаш сызықтарды екі еселеңіз.
ТүсініктемеСтандарт JSON үшін // және /* */ алып тастаңыз.

Браузерде JSON тексеріп пішімдеңіз

NEXNARA JSON пішімдеу / Diff осы құрылғыда JSON тексере алады.

Тексеруге, 2 бос орын, 4 бос орын немесе қойындымен әдемілеуге, minify, екі құжатты салыстыруға (JSON Diff) және .json файлын ашуға болады. Талдау браузерде JSON.parse қолданады, eval емес.

5 MB-тан үлкен құжаттар баяу сезілуі мүмкін. 15 MB-тан үлкен мәтін браузерде өңделмейді, бет жауапты қалуы үшін.

JSON өңдеудің өзі браузеріңізде болады. Бұл құрал үшін мәтін NEXNARA серверіне жіберілмейді. Жарнамалар мен басқа сайт мүмкіндіктері әлі желі қолданады; ол өңдеуден бөлек.

Жарамсыз JSON тексеру керек пе? JSON пішімдеу / Diff ашып мәтінді қойыңыз.

FAQ

JSON-ым неге Unexpected token дейді?

Талдауыш сол жерде рұқсат етілмеген таңбаға кездесті. Шынайы қате—жиі жоқ үтір немесе жалғыз тырнақша—сол орыннан дәл бұрын отыруы мүмкін.

JSON-да соңғы үтірлерге рұқсат бар ма?

Жоқ. Стандарт JSON соңғы қасиет немесе массив элементінен кейін үтірге рұқсат етпейді. JavaScript нысан литералдары жиі рұқсат етеді.

JSON жалғыз тырнақша қолдана ала ма?

Жоқ. Қасиет аттары мен жолдар қос тырнақша қолдануы керек.

JSON түсініктеме сақтай ала ма?

Стандарт JSON-да жоқ. Кейбір құралдар түсініктемелі JSONC немесе JSON5 қабылдайды; JSON.parse бәрібір қабылдамайды.

JSON.parse() неге сәтсіз?

Жол жарамды JSON емес. Типтік себептер: соңғы үтір, жалғыз тырнақша, тырнақшасыз кілттер, түсініктемелер немесе кесілген мән. Дәл хабарлама орындалу ортасына байланысты.

JSON жарамды ма деп қалай тексеремін?

JSON пішімдеу / Diff сияқты тексерушіге қойыңыз немесе консольде JSON.parse шақырыңыз. Талдау лақтырса, мәтін жарамды JSON емес.