Tech Help
Levinud JSON-vead: lõpetav koma, jutumärgid ja Unexpected token
Parandage kehtetu JSON: lõpetav koma, ühekordsed jutumärgid, jutumärkideta võtmed ja Unexpected token. Miks JSON.parse nurjub ja kuidas JSON-i kontrollida.
Enamik JSON-vigu tuleb rangetest reeglitest: lõpetav koma, ühekordsed jutumärgid, jutumärkideta omadusenimed, puuduv koma, sobimatud sulud, kehtetu escape või kommentaarid.
JSON näeb välja nagu JavaScripti objekt, kuid on rangem. Omadusenimed ja stringid vajavad topeltjutumärke.
Kui näete Unexpected token, võib teatatud märk olla koht, kus parsimine peatus—mitte tingimata algse vea algus.
Teie JSON on märgitud kehtetuks. Tavaliselt on see väike süntaksiprobleem, mitte katkine failivorming. Allpool seitse viga põhjustavad enamiku Unexpected token’itest.
Miks JSON nii kergesti katki läheb?
JSON on range süntaksiga andmevorming. JavaScripti objektiliteraal võib sarnaneda ja olla siiski kehtetu JSON. Standard-JSON-is vajavad omadusenimed ja stringid topeltjutumärke, lõpetav koma pole lubatud ja kommentaarid ei kuulu vormingusse.
1. Lõpetavad komad
Lisakoma pärast viimast omadust on probleem. Standard-JSON ei luba seda.
Kehtetu
{
"name": "Alex",
"age": 30,
}
Kehtiv
{
"name": "Alex",
"age": 30
}
Sama reegel kehtib massiividele. Eemaldage koma pärast viimast elementi.
Kehtetu
[
"red",
"green",
]
Kehtiv
[
"red",
"green"
]
2. Ühekordsed jutumärgid topelti asemel
JavaScript aktsepteerib sageli ühekordseid jutumärke. JSON ei. Omadusenimed ja stringiväärtused peavad kasutama topeltjutumärke.
Kehtetu
{
'name': 'Alex'
}
Kehtiv
{
"name": "Alex"
}
3. Jutumärkideta omadusenimed
JavaScriptis saab mõnikord kirjutada name ilma jutumärkideta. JSON-is peab iga omadusenimi olema topeltjutumärkidega string.
Kehtetu
{
name: "Alex",
age: 30
}
Kehtiv
{
"name": "Alex",
"age": 30
}
4. Puuduvad komad väärtuste vahel
Omaduste ja massiivi elementide vahele on vaja koma. Parser võib teatada Unexpected token järgmise jutumärgi või sulu juures, mitte puuduva koma juures.
Kehtetu
{
"name": "Alex"
"age": 30
}
Kehtiv
{
"name": "Alex",
"age": 30
}
5. Puuduvad või üleliigsed sulud
Objektid kasutavad { }. Massiivid kasutavad [ ]. Pesastatud JSON nurjub sageli, kui puudub ], on üleliigne } või need on vahetatud. Lugege avamise ja sulgemise paarid.
Kehtetu
{
"items": [1, 2
}
Kehtiv
{
"items": [1, 2]
}
6. Kehtetud escape-jadad
JSON-stringis alustab tagurpidi kaldkriips escape’i. Jadad nagu ", \ ja \n on kehtivad. Windowsi tee C:\Users ei ole: \U ei ole seaduslik JSON-escape. Kahekordistage tagurpidi kaldkriipsud, muidu peatub parser selle märgi juures.
Kehtetu
{"file":"C:\Users\Alex"}
Kehtiv
{"file":"C:\\Users\\Alex"}
7. Kommentaarid JSON-is
Standard-JSON-il pole kommentaare. Mõned seadistustööriistad aktsepteerivad // või /* */ (JSONC, JSON5 ja sarnased). See pole standard-JSON ja JSON.parse lükkab selle tagasi.
Kehtetu
{
// user name
"name": "Alex"
}
Mida tähendab Unexpected token?
Parser kohtas märki, mis selles kohas ei olnud lubatud. Teatatud koht on seal, kus lugemine peatus. Kui jätsite varem koma ära, võib viga osutada järgmise omaduse jutumärgile. Sõnastus sõltub käitusajast; ärge oodake, et iga brauser prindib sama lause.
Mida tähendab Unexpected end of JSON input?
Tekst lõppes enne, kui väärtus valmis oli. Tüüpilised põhjused: puudub } või ], kärbitud sisend, tühi keha või katkenud API vastus. See pole üksainus viga.
Miks JSON.parse() nurjub?
JSON.parse() aktsepteerib ainult kehtivat JSON-teksti. See õnnestub:
const text = '{"name":"Alex"}';
const data = JSON.parse(text);
See nurjub, sest ühekordsed jutumärgid ei ole JSON:
const text = "{'name':'Alex'}";
JSON.parse(text);
Täpne veateade sõltub JavaScripti käitusajast. Kohtlege teadet vihjena, seejärel kontrollige komasid, jutumärke ja sulge selle koha lähedal.
JavaScripti objektiliteraal võib välja näha nagu { name: 'Alex' }. Kehtiv JSON peab välja nägema nagu { "name": "Alex" }: topeltjutumärkidega nimed ja stringid, ilma lõpetava komata, ilma kommentaarideta.
- JSON-tekst
- Parser loeb žetoone
- Kehtivad andmed või Unexpected token
Kuidas JSON-viga kiiresti leida
Töötage selles järjekorras. Ärge alustage kogu faili ümberkirjutamisega.
- Käivitage JSON validaatori kaudu.
- Lugege esimest teatatud viga.
- Vaadake veidi enne teatatud kohta.
- Kontrollige komasid, eriti lõpetavaid ja puuduvaid.
- Kontrollige jutumärke: ainult topelt.
- Sobitage { } ja [ ].
- Kontrollige tagurpidi kaldkriipsu escape’e stringides.
- Eemaldage kommentaarid, kui vajate ranget JSON-i.
Kiire kaart tavalistest parandustest:
| Probleem | Parandus |
|---|---|
| Lõpetav koma | Kustutage koma pärast viimast elementi. |
| Ühekordsed jutumärgid | Kasutage nimedele ja stringidele topeltjutumärke. |
| Jutumärkideta võti | Mähi omadusenimi topeltjutumärkidesse. |
| Puuduv koma | Pange koma omaduste või massiivi elementide vahele. |
| Puuduv sulg | Sulgege iga { } ja [ ] paar. |
| Kehtetu escape | Kasutage seaduslikku escape'i või kahekordistage tagurpidi kaldkriipsud teedes. |
| Kommentaar | Eemaldage // ja /* */ standard-JSON-i jaoks. |
Valideerige ja vormindage JSON brauseris
NEXNARA JSON-i vormindamine ja võrdlus saab sellel seadmel JSON-i kontrollida.
Saate valideerida, kaunistada 2 tühikuga, 4 tühikuga või tabulatsiooniga, minify, võrrelda kahte dokumenti (JSON Diff) ja avada .json-faili. Parsimine kasutab brauseris JSON.parse’i, mitte eval’i.
Dokumendid suuremad kui 5 MB võivad tunduda aeglased. Teksti suuremat kui 15 MB ei töödelda brauseris, et leht jääks reageerivaks.
JSON-i töötlemine ise toimub teie brauseris. Teksti ei saadeta selle tööriista jaoks NEXNARA serverisse. Reklaamid ja muud saidi funktsioonid kasutavad endiselt võrku; see on töötlemisest eraldi.
Peate kontrollima kehtetut JSON-i? Avage JSON-i vormindamine ja võrdlus ja kleepige tekst.
FAQ
Miks mu JSON ütleb Unexpected token?
Parser kohtas märki, mis seal ei olnud lubatud. Tegelik viga—sageli puuduv koma või ühekordne jutumärk—võib istuda just enne seda kohta.
Kas lõpetavad komad on JSON-is lubatud?
Ei. Standard-JSON ei luba koma pärast viimast omadust või massiivi elementi. JavaScripti objektiliteraalid lubavad seda sageli.
Kas JSON saab kasutada ühekordseid jutumärke?
Ei. Omadusenimed ja stringid peavad kasutama topeltjutumärke.
Kas JSON saab sisaldada kommentaare?
Mitte standard-JSON-is. Mõned tööriistad aktsepteerivad JSONC või JSON5 kommentaaridega; JSON.parse lükkab need siiski tagasi.
Miks JSON.parse() nurjub?
String ei ole kehtiv JSON. Tüüpilised põhjused on lõpetav koma, ühekordsed jutumärgid, jutumärkideta võtmed, kommentaarid või kärbitud väärtus. Täpne teade sõltub käitusajast.
Kuidas kontrollida, kas JSON on kehtiv?
Kleepige see validaatorisse nagu JSON-i vormindamine ja võrdlus või kutsuge JSON.parse konsoolis. Kui parsimine viskab, pole tekst kehtiv JSON.