Tech Help

Често срещани JSON грешки: крайна запетая, кавички и Unexpected token

Поправете невалиден JSON: крайна запетая, единични кавички, ключове без кавички и Unexpected token. Защо JSON.parse се проваля и как да проверите JSON.

Бърз отговор

Повечето JSON грешки идват от строг синтаксис: крайна запетая, единични кавички, имена на свойства без кавички, липсваща запетая, несъвпадащи скоби, невалидно екраниране или коментари.

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 низ обратната наклонена черта започва екраниране. Последователности като ", \ и \n са валидни. Windows път, записан C:\Users, не е: \U не е законно JSON екраниране. Удвоете обратните черти, иначе парсерът спира на този знак.

Невалиден

{"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. Проверете екранирането с обратна черта в низовете.
  8. Премахнете коментарите, ако ви трябва строг JSON.

Бърза карта на обичайните поправки:

Проблем Поправка
Крайна запетаяИзтрийте запетаята след последния елемент.
Единични кавичкиИзползвайте двойни кавички за имена и низове.
Ключ без кавичкиОбвийте името на свойството в двойни кавички.
Липсваща запетаяСложете запетая между свойства или елементи на масив.
Липсваща скобаЗатворете всяка двойка { } и [ ].
Невалидно екраниранеИзползвайте законно екраниране или удвоете обратните черти в пътища.
КоментарПремахнете // и /* */ за стандартен JSON.

Проверете и форматирайте JSON в браузъра

NEXNARA Форматиране и сравнение на JSON може да провери JSON на това устройство.

Можете да валидирате, да подредите с 2 интервала, 4 интервала или табулация, minify, да сравните два документа (JSON Diff) и да отворите .json файл. Разборът използва JSON.parse в браузъра, не eval.

Документи по-големи от 5 MB могат да се усещат бавни. Текст по-голям от 15 MB не се обработва в браузъра, за да остане страницата отзивчива.

Самата обработка на JSON се случва във вашия браузър. Текстът не се изпраща към сървър на NEXNARA за този инструмент. Рекламите и други функции на сайта все още използват мрежата; това е отделно от обработката.

Трябва да проверите невалиден JSON? Отворете Форматиране и сравнение на JSON и поставете текста.

FAQ

Защо JSON-ът ми казва Unexpected token?

Парсерът срещна знак, който не е позволен там. Истинската грешка—често липсваща запетая или единични кавички—може да седи точно преди тази позиция.

Позволени ли са крайни запетаи в JSON?

Не. Стандартният JSON не позволява запетая след последното свойство или елемент на масив. Литералите на обекти JavaScript често позволяват.

Може ли JSON да използва единични кавички?

Не. Имената на свойства и низовете трябва да използват двойни кавички.

Може ли JSON да съдържа коментари?

Не в стандартния JSON. Някои инструменти приемат JSONC или JSON5 с коментари; JSON.parse все пак ги отхвърля.

Защо JSON.parse() се проваля?

Низът не е валиден JSON. Типични причини са крайна запетая, единични кавички, ключове без кавички, коментари или отрязана стойност. Точното съобщение зависи от средата за изпълнение.

Как да проверя дали JSON е валиден?

Поставете го във валидатор като Форматиране и сравнение на JSON или извикайте JSON.parse в конзола. Ако разборът хвърли изключение, текстът не е валиден JSON.