Tech Help
Kāpēc JSON.parse saka "Unexpected token"?
JSON.parse izmet Unexpected token, kad teksts nav derīgs JSON. Novērsiet vienpēdiņas, beigu komatus, HTML atbildes un kļūdas pozīciju.
JSON.parse() izmet SyntaxError, kad ievade nav derīgs JSON. «Unexpected token» parasti nozīmē, ka parseris sasniedza rakstzīmi, kas tajā struktūras punktā nav atļauta.
Bieži cēloņi: vienpēdiņas, beigu komati, īpašību nosaukumi bez pēdiņām, slikts virknes escape, papildu teksts ap JSON, vai HTML vai cita ne-JSON ķermeņa parsēšana kā JSON.
Precīzais kļūdas formulējums atšķiras pēc JavaScript dzinēja un pārlūkprogrammas. Nepieņemiet, ka katra izpildlaika vide drukā «Unexpected token X in JSON at position N».
Šī ir Unexpected token novēršana JSON.parse: ko kļūda nozīmē, kā lasīt pozīciju un ko darīt, kad ķermenis ir HTML. Plašāks beigu komata, pēdiņu un Unexpected end pārskats ir Biežas JSON kļūdas: beigu komats, pēdiņas un Unexpected token.
Ko nozīmē “Unexpected token” JSON.parse()?
JSON.parse() prasa JSON gramatiku. Nelikumīga rakstzīme pašreizējā pozīcijā izmet SyntaxError. {“name”:“Alex”,} ir nederīgs: pēc tā komata objekts nevar beigties. Ziņojuma teksts un pozīcija joprojām atšķiras pēc runtime.
Kādu kļūdu izmet JSON.parse()?
Nederīgs JSON parasti izmet SyntaxError. Reģistrējiet error.name, lai apstiprinātu tipu. Nekodējiet visu error.message: dzinēji un versijas to formulē atšķirīgi.
try {
JSON.parse('{"name":"Alex",}');
} catch (error) {
console.log(error.name);
// SyntaxError
}
1. Vienpēdiņu lietošana dubultpēdiņu vietā
{‘name’:‘Alex’} ir nederīgs JSON. {“name”:“Alex”} ir derīgs. JSON virknes un objekta dalībnieku nosaukumi lieto dubultpēdiņas. JavaScript objekta literālis kā const user = { name: ‘Alex’ } var būt likumīgs JavaScript un tomēr nebūt JSON teksts.
Nederīgs
{'name':'Alex'}
Derīgs
{"name":"Alex"}
2. Beigu komati
Komats pēc pēdējās īpašības vai masīva elementa nav derīgs standarta JSON. {“name”:“Alex”,“age”:30,} un [1, 2, 3,] abi neizdodas. Uzskatiet to par vienu Unexpected token cēloni; Biežas JSON kļūdas: beigu komats, pēdiņas un Unexpected token beigu komatus aptver dziļāk.
Nederīgs
{
"name": "Alex",
"age": 30,
}
Derīgs
{
"name": "Alex",
"age": 30
}
[1, 2, 3,]
3. Īpašību nosaukumi bez pēdiņām
{ name: “Alex” } var būt JavaScript objekta literālis. JSON objekta dalībnieku nosaukumi ir virknes un tiem vajag dubultpēdiņas: {“name”:“Alex”}.
Nederīgs
{
name: "Alex"
}
Derīgs
{
"name": "Alex"
}
4. Nederīgs virknes escape
JSON tekstā pretējā slīpsvītra sāk escape. Neapstrādāts ceļš kā C:\Users\Alex ir nederīgs, jo \U nav likumīgs escape. Dubultojiet pretējās slīpsvītras. Nesajauciet saimniekvalodas escape ar JSON escape. Biežas JSON kļūdas: beigu komats, pēdiņas un Unexpected token to aptver dziļāk.
Nederīgs
{"file":"C:\Users\Alex"}
Derīgs
{"file":"C:\\Users\\Alex"}
5. Papildu teksts pirms JSON vai pēc tā
JSON.parse gaida vienu JSON vērtību. Prefikss kā Success: pirms {“ok”:true}, vai sufikss kā done pēc tās, padara visu virkni nederīgu. Nenozīmīgas atstarpes ap vienu JSON vērtību ir atļautas. JSON neaizliedz atstarpes pirms vērtības vai pēc tās.
Success:
{"ok":true}
{"ok":true}
done
6. HTML parsēšana JSON vietā
response.json() izsaukums HTML lapā ir biežs Unexpected token gadījums. Nepareizi endpointi, 404 vai 500 HTML lapas, pieteikšanās novirzīšanas, starpnieka ķermeņi un rezerves lapas bieži sākas ar iezīmēm. «Unexpected token < vienmēr nozīmē HTML» ir pārāk spēcīgi: < ir pavediens, ne pierādījums.
fetch('/api/data')
.then(response => response.json())
Ko parasti nozīmē “Unexpected token <”?
JSON vērtības parasti nesākas ar <. Ja ķermenis sākas ar vai , < var būt pirmā nelikumīgā rakstzīme. Vietējā atkļūdošanā pārbaudiet HTTP statusu, Content-Type un neapstrādāto ķermeni. Dzinēja formulējums joprojām atšķiras.
Pārbaudiet atbildi pirms parsēšanas
fetch ķermeni var patērēt tikai vienreiz. Vietējā atkļūdošanā vispirms lasiet text(), apskatiet īsu prefiksu, tad JSON.parse to pašu virkni. Neizsauciet response.json() un pēc tam response.text() uz tās pašas atbildes. Pēc noklusējuma nereģistrējiet jutīgas ražošanas kravas.
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);
}
Ko nozīmē “at position 123”?
Daži dzinēji ziņo pozīciju, rindu vai kolonnu. Meklējiet tuvumā sliktu pēdiņu, komatu, iekavu vai escape. Šis indekss ir, kur parsēšana pamanīja problēmu; īstais cēlonis var būt agrāk. Nav garantēts, ka tā ir precīzi bojātā rakstzīme.
Unexpected token pret Unexpected end
Unexpected token nozīmē, ka parseris sastapa rakstzīmi, ko negaidīja. Unexpected end var parādīties, kad ievade apstājas, pirms vērtība ir pilnīga, kā {“name”:“Alex” bez aizverošās figūriekavas. Precīzais formulējums ir atkarīgs no dzinēja. Biežas JSON kļūdas: beigu komats, pēdiņas un Unexpected token nepilnīgo JSON aptver plašāk.
{"name":"Alex"
JSON nav tas pats, kas JavaScript objekta literālis
JSON ir datu formāts. JavaScript objekta literālis ir JavaScript sintakse. JS objekts ar atslēgām bez pēdiņām, vienpēdiņām un beigu komatu nav derīgs JSON teksts. JSON.parse nevar droši parsēt JavaScript objekta literāļus.
const data = {
name: 'Alex',
active: true,
};
{
"name": "Alex",
"active": true
}
Vai JSON var saturēt komentārus?
Standarta JSON neatbalsta komentārus. Rinda // objekta iekšpusē ir nederīga. JSON5 un līdzīgi paplašinājumi ir citi formāti. JSON formatēšana un salīdzināšana pārbauda standarta JSON ar JSON.parse un neuzskata JSON5 par JSON.
{
// user name
"name": "Alex"
}
Vai undefined, NaN un Infinity ir derīgs JSON?
Nē. JSON vērtības ir objekts, masīvs, virkne, skaitlis, true, false un null. undefined, NaN un Infinity nav. Augšējā līmeņa vērtībai nav jābūt objektam vai masīvam: true, 123, “hello” un null ir derīgs JSON.
{"a":undefined}
{"a":NaN}
{"a":Infinity}
true
123
"hello"
null
Kā soli pa solim labot Unexpected token kļūdu
Strādājiet ar avotu, nevis kļūdas virkni:
- Apstipriniet, ka ievade tiešām ir JSON, ne HTML, žurnāli vai JavaScript.
- Apskatiet pirmās neapstrādātās ievades rakstzīmes.
- Ja nāca no API, pārbaudiet HTTP statusu un Content-Type. Ne 200, ne application/json negarantē derīgu JSON.
- Pārbaudiet sintaksi JSON parserī.
- Ziņoto pozīciju, rindu vai kolonnu lietojiet kā pavedienu, ne kā garantētu problēmas sakni.
- Pārbaudiet pēdiņas, komatus, figūriekavas, kvadrātiekavas un escape pie tās zonas.
- Salīdziniet ar formatētu, pārbaudītu kopiju.
- Labojiet serializatoru vai endpoint. Nedzēsiet ziņoto žetonu uz labu laimi.
Globāla ' aizstāšana ar " var salauzt apostrofus virknēs, jau escapeotu tekstu un avotus, kas nav JSON. Radiet derīgu JSON no īstā serializatora. Neuzskatiet eval par JSON parseri.
Lietojiet JSON.stringify(), kad JavaScript veidojat JSON
Dodiet priekšroku JSON.stringify, nevis virkņu savienošanai ar roku. Izstaro derīgu JSON tekstu vērtībām, ko serializē. Nesaglabā katru JavaScript vērtību: undefined, funkcijām un simboliem ir īpaša uzvedība. Šī detaļa šeit ir ārpus tvēruma.
const data = {
name: "Alex",
active: true
};
const json = JSON.stringify(data);
// {"name":"Alex","active":true}
Nederīgs JSON pret īstu labojumu
Šie pāri pārbaudīti ar JSON.parse. HTML gadījumā labojums ir atbilde, ne sintakses rediģēšana.
| Problēma | Nederīgs | Labojums |
|---|---|---|
| Vienpēdiņas | {'a':1} |
{"a":1} |
| Beigu komats | {"a":1,} |
{"a":1} |
| Atslēga bez pēdiņām | {a:1} |
{"a":1} |
| undefined | {"a":undefined} |
{"a":null} |
| HTML ķermenis | <html>... |
Pārbaudiet endpoint un neapstrādāto atbildi. Nerediģējiet HTML par JSON. |
Vienkāršs Unexpected token lēmumu ceļvedis
Ja JSON.parse neizdevās, vispirms izlemiet, vai vispār ir JSON, pirms pārrakstāt pēdiņas.
- JSON.parse neizdevās
- No API? Pārbaudiet statusu, Content-Type un neapstrādāto ķermeni
- Vai sākas kā JSON? Ja nē, labojiet avotu vai endpoint
- Ja jā, pārbaudiet pēdiņas, komatus, figūriekavas, kvadrātiekavas, escape, neatbalstītas vērtības
- Ziņoto pozīciju lietojiet kā pavedienu
- Labojiet avotu, tad parsējiet vēlreiz
Pārbaudiet JSON pirms parsēšanas vai lietošanas
NEXNARA JSON formatēšana un salīdzināšana pārbauda JSON pārlūkprogrammā ar JSON.parse—ne eval.
Pārbaude, skaists formatējums ar 2 atstarpēm, 4 atstarpēm vai tabulācijām, minify, kopēšana, lejupielāde un .json augšupielāde. JSON Diff aptver ligzdotus objektus un masīvus, ceļus, kopsavilkumu, filtrus un apmaiņu. Pēc parsēšanas tās pašas datu skaisti formatētā un minify kopija salīdzinās kā vienādas; objekta atslēgas salīdzina pēc nosaukuma.
Teksts, lielāks par 5 MB, var šķist lēns. Tekstu, lielāku par 15 MB, pārlūkprogrammā neapstrādā.
JSON pārbaude un formatēšana notiek jūsu pārlūkprogrammā. Šis rīks nesūta JSON uz NEXNARA serveri. Reklāmas un citas vietnes funkcijas joprojām izmanto tīklu.
Ielīmējiet virkni, kas neizdodas, JSON formatēšana un salīdzināšana un izlasiet pirmās rakstzīmes, pirms pārrakstāt pēdiņas.
FAQ
Kāpēc JSON.parse saka Unexpected token?
Teksts nav derīgs JSON punktā, kur parseris apstājās. Tipiski cēloņi: pēdiņas, komati, papildu teksts vai ķermenis, kas nav JSON, piemēram HTML.
Ko nozīmē Unexpected token < in JSON?
Pirmā nelikumīgā rakstzīme var būt <. Tas bieži norāda uz HTML lapu, bet nav 404 vai HTML pierādījums katrā gadījumā. Pārbaudiet statusu, Content-Type un neapstrādāto ķermeni.
Kā atrast kļūdas pozīciju JSON?
Ja dzinējs ziņo pozīciju, rindu vai kolonnu, skatieties tuvumā. Īstā kļūda var būt agrāk. Lietojiet kā pavedienu, tad pārbaudiet.
Vai JSON var lietot vienpēdiņas?
Nē. Standarta JSON virknes un dalībnieku nosaukumi lieto dubultpēdiņas.
Vai JSON var būt beigu komati?
Nē. Standarta JSON neatļauj komatu pēc pēdējās īpašības vai masīva elementa.
Kā pārbaudīt, vai virkne ir derīgs JSON?
Izsaukt JSON.parse try/catch, vai ielīmēt tekstu JSON formatēšana un salīdzināšana. Ja parsēšana izmet SyntaxError, virkne nav derīgs JSON.