Tech Help

Me yasa JSON.parse ke cewa "Unexpected token"?

JSON.parse tana jefa Unexpected token lokacin da rubutu ba JSON mai inganci ba. Gyara ƙirari guda, koma ta ƙarshe, amsoshi na HTML, da matsayin kuskure.

Amsa ta gaggawa

JSON.parse() tana jefa SyntaxError lokacin da shigarwa ba JSON mai inganci ba. “Unexpected token” gabaɗaya tana nufin mai nazarin ya kai harafi da ba a yarda da shi ba a waccan matsayi a cikin tsari.

Dalilai na yau da kullum sun haɗa da ƙirari guda, koma ta ƙarshe, sunayen sifa ba tare da ƙirari ba, escape na jeri mara inganci, rubutu ƙari kewaye da JSON, ko nazarin HTML ko wani jiki da ba JSON ba a matsayin JSON.

Kalmomin kuskure daidai suna bambanta da injin JavaScript da burauza. Kada ka ɗauka cewa kowane yanayin aiki yana buga “Unexpected token X in JSON at position N”.

Wannan gyaran Unexpected token ne na JSON.parse: abin da kuskuren ke nufi, yadda ake karanta matsayi, da abin da za a yi lokacin da jiki HTML ne. Ƙarin ɗaukar koma ta ƙarshe, ƙirari, da Unexpected end yana cikin Kurakurai na JSON da aka saba: koma ta ƙarshe, ƙirari da Unexpected token.

Me “Unexpected token” ke nufi a JSON.parse()?

JSON.parse() tana buƙatar nahawun JSON. Harafi mara doka a matsayin yanzu yana jefa SyntaxError. {“name”:“Alex”,} mara inganci ne: bayan waccan koma abu ba zai iya ƙarewa ba. Rubutun saƙo da matsayi har yanzu suna bambanta da yanayin aiki.

Wane kuskure JSON.parse() ke jefa?

JSON mara inganci gabaɗaya tana jefa SyntaxError. Rubuta error.name don tabbatar da nau’i. Kada ka rubuta cikakken error.message a tsaye: injuna da sigogi suna amfani da kalmomi daban.

try {
  JSON.parse('{"name":"Alex",}');
} catch (error) {
  console.log(error.name);
  // SyntaxError
}

1. Amfani da ƙirari guda maimakon ƙirari biyu

{‘name’:‘Alex’} JSON mara inganci ce. {“name”:“Alex”} tana da inganci. Jerin JSON da sunayen mambobin abu suna amfani da ƙirari biyu. Literali na abu na JavaScript kamar const user = { name: ‘Alex’ } na iya zama JavaScript mai doka amma har yanzu ba rubutun JSON ba.

Mara inganci

{'name':'Alex'}

Mai inganci

{"name":"Alex"}

2. Komomi na ƙarshe

Koma bayan sifa ko abu na ƙarshe na jeri ba JSON daidai mai inganci ba ce. {“name”:“Alex”,“age”:30,} da [1, 2, 3,] duka suna gaza. Ɗauki wannan a matsayin dalili ɗaya na Unexpected token; Kurakurai na JSON da aka saba: koma ta ƙarshe, ƙirari da Unexpected token tana ɗaukar komomi na ƙarshe da zurfi.

Mara inganci

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

Mai inganci

{
  "name": "Alex",
  "age": 30
}
[1, 2, 3,]

3. Sunayen sifa ba tare da ƙirari ba

{ name: “Alex” } na iya zama literali na abu na JavaScript. A JSON, sunayen mambobi jeri ne kuma suna buƙatar ƙirari biyu: {“name”:“Alex”}.

Mara inganci

{
  name: "Alex"
}

Mai inganci

{
  "name": "Alex"
}

4. Escape na jeri mara inganci

A rubutun JSON layin baya yana fara escape. Hanya danyen kamar C:\Users\Alex mara inganci ce saboda \U ba escape mai doka ba ce. Ninka layukan baya. Kada ka gauraya escape na harshen-mai-gida da escape na JSON. Kurakurai na JSON da aka saba: koma ta ƙarshe, ƙirari da Unexpected token tana ɗaukar wannan da zurfi.

Mara inganci

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

Mai inganci

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

5. Rubutu ƙari kafin ko bayan JSON

JSON.parse tana tsammanin ƙima ɗaya ta JSON. Magabaci kamar Success: kafin {“ok”:true}, ko magabaci kamar done bayansa, yana sanya jerin gaba ɗaya mara inganci. Sarari marar muhimmanci kewaye da ƙima ɗaya ta JSON an yarda. Ba a hana JSON samun sarari kafin ko bayan ƙima.

Success:
{"ok":true}
{"ok":true}
done

6. Nazarin HTML maimakon JSON

Kiran response.json() a shafin HTML yanayi ne na Unexpected token da aka saba. Endpoint kuskure, shafukan HTML 404 ko 500, juyawar shiga, jikunan wakili, da shafukan madadin sau da yawa suna farawa da alama. “Unexpected token < koyaushe tana nufin HTML” tana da ƙarfi sosai: < alama ce, ba hujja ba.

fetch('/api/data')
  .then(response => response.json())

Me “Unexpected token <” ke nufi galibi?

Ƙimar JSON galibi ba sa farawa da <. Idan jiki ya fara da ko , < na iya zama harafin farko mara doka. A gyaran gida, duba matsayin HTTP, Content-Type, da jikin danye. Kalmomin injin har yanzu suna bambanta.

Duba amsa kafin nazarinta

Jikin fetch za a iya amfani da shi sau ɗaya kawai. A gyaran gida, karanta text() da farko, duba magabaci gajere, sa’an nan JSON.parse wannan jerin ɗaya. Kada ka kira response.json() sa’an nan response.text() a amsa ɗaya. Kada ka rubuta nauyin samarwa mai mahimmanci ta tsohuwar hanya.

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);
}

Me “at position 123” ke nufi?

Wasu injuna suna ruwaito matsayi, layi, ko shafi. Nemo ƙirari, koma, baki, ko escape mara kyau kusa. Waccan lissafin ita ce inda nazarin ya lura da matsala; dalilin gaske na iya zama a baya. Ba a tabbatar da cewa shine harafin kuskure daidai ba.

Unexpected token vs Unexpected end

Unexpected token tana nufin mai nazarin ya haɗu da harafi da bai yi tsammani ba. Unexpected end na iya bayyana lokacin da shigarwa ta tsaya kafin ƙima ta cika, kamar a {“name”:“Alex” ba tare da bakin rufewa ba. Kalmomi daidai sun dogara da injin. Kurakurai na JSON da aka saba: koma ta ƙarshe, ƙirari da Unexpected token tana ɗaukar JSON marar cikawa da faɗi.

{"name":"Alex"

JSON ba daidai da literali na abu na JavaScript ba ce

JSON tsarin bayanai ne. Literali na abu na JavaScript nahawun JavaScript ne. Abun JS mai maɓallan ba tare da ƙirari ba, ƙirari guda, da koma ta ƙarshe ba rubutun JSON mai inganci ba ne. JSON.parse ba za ta iya nazarin literali na abubuwan JavaScript cikin aminci ba.

const data = {
  name: 'Alex',
  active: true,
};
{
  "name": "Alex",
  "active": true
}

Shin JSON na iya ƙunshe da tsokaci?

JSON daidai ba ta goyi bayan tsokaci. Layin // a cikin abu mara inganci ne. JSON5 da ƙarin irin wannan tsarurruka daban ne. Gyara da kwatanta JSON tana tabbatar da JSON daidai da JSON.parse kuma ba ta ɗauki JSON5 a matsayin JSON.

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

Shin undefined, NaN, da Infinity JSON mai inganci ne?

A’a. Ƙimar JSON sune abu, jeri, jeri na haruffa, lamba, true, false, da null. undefined, NaN, da Infinity ba su ba. Ƙima ta sama ba dole ba ce ta zama abu ko jeri: true, 123, “hello”, da null JSON mai inganci ne.

{"a":undefined}
{"a":NaN}
{"a":Infinity}
true
123
"hello"
null

Yadda za a gyara kuskuren Unexpected token mataki-mataki

Yi aiki a tushen, ba a jerin kuskure ba:

  1. Tabbatar shigarwa JSON ce da gaske, ba HTML, rajista, ko JavaScript ba.
  2. Duba haruffan farko na shigarwa danye.
  3. Idan ta fito daga API, duba matsayin HTTP da Content-Type. Ko 200 ko application/json ba su tabbatar da JSON mai inganci ba.
  4. Tabbatar da nahawu a mai nazarin JSON.
  5. Yi amfani da matsayi, layi, ko shafi da aka ruwaito a matsayin alama, ba a matsayin dalilin tushen da aka tabbatar ba.
  6. Duba ƙirari, koma, bakuna, bakunan murabba’i, da escape kusa da waccan yanki.
  7. Kwatanta da kwafi da aka tsara kuma aka tabbatar.
  8. Gyara mai tsarawa ko endpoint. Kada ka share alamar da aka ruwaito a bazuwar.
Kada ka «gyara» JSON ta musanya ƙirari a bazuwar

Musanya na duniya na ' zuwa " na iya karya apostrophe a cikin jeri, rubutu da aka riga aka escape, da tushen da ba JSON ba. Samar da JSON mai inganci daga mai tsarawa na gaske. Kada ka ɗauki eval a matsayin mai nazarin JSON.

Yi amfani da JSON.stringify() lokacin samar da JSON a JavaScript

Fi son JSON.stringify fiye da haɗa jeri da hannu. Tana fitar da rubutun JSON mai inganci ga ƙimar da take tsarawa. Ba ta kiyaye kowace ƙima ta JavaScript: undefined, ayyuka, da alamomi suna da hali na musamman. Wannan cikakken bayani yana wajen iyaka a nan.

const data = {
  name: "Alex",
  active: true
};
const json = JSON.stringify(data);
// {"name":"Alex","active":true}

JSON mara inganci vs gyara na gaske

An duba waɗannan nau’i-nau’i da JSON.parse. Ga HTML, gyara shine amsa, ba gyaran nahawu ba.

Matsala Mara inganci Gyara
Ƙirari guda {'a':1} {"a":1}
Koma ta ƙarshe {"a":1,} {"a":1}
Maɓalli ba tare da ƙirari ba {a:1} {"a":1}
undefined {"a":undefined} {"a":null}
Jikin HTML <html>... Duba endpoint da amsa danye. Kada ka gyara HTML zuwa JSON.

Jagorar yanke shawara ta Unexpected token mai sauƙi

Idan JSON.parse ta gaza, yanke shawara ko kana da JSON kafin sake rubuta ƙirari.

  • JSON.parse ta gaza
  • Daga API? Duba matsayi, Content-Type, da jikin danye
  • Tana farawa da JSON? Idan a'a, gyara tushen ko endpoint
  • Idan eh, tabbatar da ƙirari, koma, bakuna, bakunan murabba'i, escape, ƙimar da ba a goyi bayan su ba
  • Yi amfani da matsayin da aka ruwaito a matsayin alama
  • Gyara tushen, sa'an nan sake nazari
Unexpected token tana sanya suna ga mamaki. Tushen rubutu sau da yawa shine gyara na gaske.

Tabbatar da JSON kafin nazari ko amfani da ita

NEXNARA Gyara da kwatanta JSON tana tabbatar da JSON a cikin burauza da JSON.parse—ba eval ba.

Tabbatar, kyautata da sarari 2, sarari 4, ko tab, minify, kwafi, sauke, da loda .json. JSON Diff tana ɗaukar abubuwa da jeri da aka sa a ciki, hanyoyi, taƙaitawa, tacewa, da musanya. Bayan nazari, kwafin kyau da minify na wannan bayanai ɗaya ana kwatanta su daidai; maɓallan abu ana kwatanta su da suna.

Rubutu da ya fi 5 MB na iya jin jinkiri. Rubutu da ya fi 15 MB ba a sarrafa shi a cikin burauza ba.

Tabbatarwa da tsarin JSON suna faruwa a cikin burauzarka. Wannan kayan aikin ba ya aika JSON zuwa uwar garken NEXNARA. Talla da sauran fasalolin rukunin yanar gizo har yanzu suna amfani da hanyar sadarwa.

Manna jerin da ya gaza cikin Gyara da kwatanta JSON ka karanta haruffan farko kafin sake rubuta ƙirari.

FAQ

Me yasa JSON.parse ke cewa Unexpected token?

Rubutu ba JSON mai inganci ba ne a matsayin da mai nazarin ya tsaya. Dalilai na yau da kullum su ne ƙirari, koma, rubutu ƙari, ko jiki da ba JSON ba kamar HTML.

Me Unexpected token < a JSON ke nufi?

Harafin farko mara doka na iya zama <. Wannan sau da yawa yana nuna shafin HTML, amma ba hujja ta 404 ko ta HTML a kowane yanayi ba. Duba matsayi, Content-Type, da jikin danye.

Yaya zan sami matsayin kuskure a JSON?

Idan injin ya ruwaito matsayi, layi, ko shafi, duba kusa. Kuskuren gaske na iya zama a baya. Yi amfani da shi a matsayin alama, sa’an nan tabbatar.

Shin JSON na iya amfani da ƙirari guda?

A’a. Jerin JSON daidai da sunayen mambobi suna amfani da ƙirari biyu.

Shin JSON na iya samun komomi na ƙarshe?

A’a. JSON daidai ba ta yarda da koma bayan sifa ko abu na ƙarshe na jeri ba.

Yaya zan duba ko jeri JSON mai inganci ne?

Kira JSON.parse a try/catch, ko manna rubutu cikin Gyara da kwatanta JSON. Idan nazarin ya jefa SyntaxError, jerin ba JSON mai inganci ba ne.