Tech Help

Dažnos JSON klaidos: gale esantis kablelis, kabutės ir Unexpected token

Pataisykite neteisingą JSON: gale esantis kablelis, viengubos kabutės, raktai be kabučių ir Unexpected token. Kodėl JSON.parse nesėkmingas ir kaip patikrinti JSON.

Greitas atsakymas

Dauguma JSON klaidų kyla iš griežtų taisyklių: gale esantis kablelis, viengubos kabutės, savybių vardai be kabučių, trūkstamas kablelis, nesutampantys skliaustai, neteisingas escape arba komentarai.

JSON atrodo kaip JavaScript objektas, bet griežtesnis. Savybių vardams ir eilutėms reikia dvigubų kabučių.

Jei matote Unexpected token, praneštas ženklas gali būti vieta, kur analizė sustojo—nebūtinai originalios klaidos pradžia.

Jūsų JSON pažymėtas kaip neteisingas. Paprastai tai smulki sintaksės problema, ne sugadintas failo formatas. Žemiau septynios klaidos sukelia daugumą Unexpected token.

Kodėl JSON taip lengvai lūžta?

JSON yra duomenų formatas su griežta sintakse. JavaScript objekto literalis gali atrodyti panašiai ir vis tiek būti neteisingas JSON. Standartiniame JSON savybių vardams ir eilutėms reikia dvigubų kabučių, gale esantis kablelis neleidžiamas, o komentarai nėra formato dalis.

1. Gale esantys kableliai

Papildomas kablelis po paskutinės savybės yra problema. Standartinis JSON to neleidžia.

Neteisingas

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

Teisingas

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

Ta pati taisyklė taikoma masyvams. Pašalinkite kablelį po paskutinio elemento.

Neteisingas

[
  "red",
  "green",
]

Teisingas

[
  "red",
  "green"
]

2. Viengubos kabutės vietoj dvigubų

JavaScript dažnai priima viengubas kabutes. JSON ne. Savybių vardai ir eilučių reikšmės turi naudoti dvigubas kabutes.

Neteisingas

{
  'name': 'Alex'
}

Teisingas

{
  "name": "Alex"
}

3. Savybių vardai be kabučių

JavaScript kartais galima rašyti name be kabučių. JSON kiekvienas savybės vardas turi būti eilutė su dvigubomis kabutėmis.

Neteisingas

{
  name: "Alex",
  age: 30
}

Teisingas

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

4. Trūkstami kableliai tarp reikšmių

Tarp savybių ir masyvo elementų reikia kablelio. Analizatorius gali pranešti Unexpected token prie kitos kabutės ar skliausto, ne prie trūkstamo kablelio.

Neteisingas

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

Teisingas

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

5. Trūkstami arba pertekliniai skliaustai

Objektai naudoja { }. Masyvai naudoja [ ]. Įdėtas JSON dažnai nesėkmingas, kai trūksta ], perteklinė } arba jie sukeisti. Suskaičiuokite atidarymo ir uždarymo poras.

Neteisingas

{
  "items": [1, 2
}

Teisingas

{
  "items": [1, 2]
}

6. Neteisingos escape sekos

JSON eilutėje atvirkštinis pasvirasis brūkšnys pradeda escape. Sekos kaip ", \ ir \n teisingos. Windows kelias C:\Users nėra: \U nėra teisėtas JSON escape. Padvigubinkite atvirkštinius brūkšnius, kitaip analizatorius sustoja ties tuo ženklu.

Neteisingas

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

Teisingas

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

7. Komentarai JSON viduje

Standartiniame JSON komentarų nėra. Kai kurie konfigūracijos įrankiai priima // arba /* */ (JSONC, JSON5 ir panašūs). Tai ne standartinis JSON, ir JSON.parse atmes.

Neteisingas

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

Ką reiškia Unexpected token?

Analizatorius sutiko ženklą, kuris toje pozicijoje neleidžiamas. Pranešta vieta yra ten, kur skaitymas sustojo. Jei anksčiau praleidote kablelį, klaida gali rodyti į kitos savybės kabutę. Formuluotė priklauso nuo vykdymo aplinkos; nesitikėkite, kad kiekviena naršyklė spausdins tą patį sakinį.

Ką reiškia Unexpected end of JSON input?

Tekstas baigėsi prieš užbaigiant reikšmę. Tipinės priežastys: trūksta } arba ], nukirpta įvestis, tuščias kūnas arba nutrauktas API atsakas. Tai ne viena vienintelė klaida.

Kodėl JSON.parse() nesėkmingas?

JSON.parse() priima tik teisingą JSON tekstą. Tai pavyksta:

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

Tai nesėkminga, nes viengubos kabutės nėra JSON:

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

Tikslus klaidos pranešimas priklauso nuo JavaScript vykdymo aplinkos. Laikykite pranešimą užuomina, tada patikrinkite kablelius, kabutes ir skliaustus prie tos pozicijos.

JSON nėra tas pats kaip JavaScript objektas

JavaScript objekto literalis gali atrodyti kaip { name: 'Alex' }. Teisingas JSON turi atrodyti kaip { "name": "Alex" }: vardai ir eilutės su dvigubomis kabutėmis, be gale esančio kablelio, be komentarų.

  • JSON tekstas
  • Analizatorius skaito žetonus
  • Teisingi duomenys arba Unexpected token
Klaidos žymė yra ten, kur analizė sustojo, kas gali būti po tikrosios klaidos.

Kaip greitai rasti JSON klaidą

Dirbkite šia tvarka. Nepradėkite perrašydami visą failą.

  1. Paleiskite JSON per tikrintuvą.
  2. Perskaitykite pirmą praneštą klaidą.
  3. Pažiūrėkite šiek tiek prieš praneštą poziciją.
  4. Patikrinkite kablelius, ypač gale esančius ir trūkstamus.
  5. Patikrinkite kabutes: tik dvigubos.
  6. Suderinkite { } ir [ ].
  7. Patikrinkite atvirkštinio brūkšnio escape eilutėse.
  8. Pašalinkite komentarus, jei reikia griežto JSON.

Greitas įprastų pataisų žemėlapis:

Problema Pataisa
Gale esantis kablelisIštrinkite kablelį po paskutinio elemento.
Viengubos kabutėsNaudokite dvigubas kabutes vardams ir eilutėms.
Raktas be kabučiųApsupkite savybės vardą dvigubomis kabutėmis.
Trūkstamas kablelisĮdėkite kablelį tarp savybių arba masyvo elementų.
Trūkstamas skliaustasUždarykite kiekvieną { } ir [ ] porą.
Neteisingas escapeNaudokite teisėtą escape arba padvigubinkite atvirkštinius brūkšnius keliuose.
KomentarasPašalinkite // ir /* */ standartiniam JSON.

Patikrinkite ir formatuokite JSON naršyklėje

NEXNARA JSON formatavimas ir palyginimas gali patikrinti JSON šiame įrenginyje.

Galite tikrinti, gražinti 2 tarpais, 4 tarpais arba tabuliacija, minify, palyginti du dokumentus (JSON Diff) ir atidaryti .json failą. Analizė naudoja JSON.parse naršyklėje, ne eval.

Dokumentai didesni nei 5 MB gali atrodyti lėti. Tekstas didesnis nei 15 MB naršyklėje neapdorojamas, kad puslapis liktų reaguojantis.

Pats JSON apdorojimas vyksta jūsų naršyklėje. Tekstas šiam įrankiui nesiunčiamas į NEXNARA serverį. Skelbimai ir kitos svetainės funkcijos vis dar naudoja tinklą; tai atskira nuo apdorojimo.

Reikia patikrinti neteisingą JSON? Atidarykite JSON formatavimas ir palyginimas ir įklijuokite tekstą.

FAQ

Kodėl mano JSON sako Unexpected token?

Analizatorius sutiko ženklą, kuris ten neleidžiamas. Tikroji klaida—dažnai trūkstamas kablelis arba vienguba kabutė—gali sėdėti tuoj prieš tą poziciją.

Ar gale esantys kableliai leidžiami JSON?

Ne. Standartinis JSON neleidžia kablelio po paskutinės savybės ar masyvo elemento. JavaScript objekto literalai dažnai leidžia.

Ar JSON gali naudoti viengubas kabutes?

Ne. Savybių vardai ir eilutės turi naudoti dvigubas kabutes.

Ar JSON gali turėti komentarų?

Ne standartiniame JSON. Kai kurie įrankiai priima JSONC arba JSON5 su komentarais; JSON.parse vis tiek juos atmes.

Kodėl JSON.parse() nesėkmingas?

Eilutė nėra teisingas JSON. Tipinės priežastys: gale esantis kablelis, viengubos kabutės, raktai be kabučių, komentarai arba nukirpta reikšmė. Tikslus pranešimas priklauso nuo vykdymo aplinkos.

Kaip patikrinti, ar JSON teisingas?

Įklijuokite į tikrintuvą kaip JSON formatavimas ir palyginimas arba iškvieskite JSON.parse konsolėje. Jei analizė meta klaidą, tekstas nėra teisingas JSON.