Tech Help

Zergatik dio JSON.parse-ek "Unexpected token"?

JSON.parse-ek Unexpected token jaurtitzen du testua JSON baliozkoa ez denean. Araztu komatxo bakunak, amaierako komak, HTML erantzunak eta errorearen posizioa.

Erantzun laburra

JSON.parse()-ek SyntaxError jaurtitzen du sarrera JSON baliozkoa ez denean. “Unexpected token”-ek, oro har, esan nahi du analizatzaileak egitura hartan onartzen ez den karaktere batera iritsi dela.

Kausa ohikoenak: komatxo bakunak, amaierako komak, komatxorik gabeko propietate-izenak, kate-ihes okerra, JSON inguruko testu gehigarria, edo HTML edo JSON ez den beste gorputz bat JSON gisa aztertzea.

Errorearen hitz zehatzak JavaScript motorren eta nabigatzailearen arabera aldatzen dira. Ez jo runtime orok «Unexpected token X in JSON at position N» inprimatzen duela.

Hau JSON.parse-en Unexpected token arazoa da: zer esan nahi duen erroreak, nola irakurri posizioa, eta zer egin gorputza HTML denean. Amaierako koma, komatxoak eta Unexpected end zabalago daude JSON akats ohikoak: amaierako koma, komatxoak eta Unexpected token-n.

Zer esan nahi du “Unexpected token”-ek JSON.parse()-n?

JSON.parse()-ek JSON gramatika eskatzen du. Uneko posizioko karaktere ilegalak SyntaxError jaurtitzen du. {“name”:“Alex”,} baliogabea da: koma horren ondoren objektua ezin da amaitu. Mezuaren testua eta posizioa runtime-aren arabera aldatzen dira oraindik.

Zein errore jaurtitzen du JSON.parse()-ek?

JSON baliogabeak, oro har, SyntaxError jaurtitzen du. Erregistratu error.name mota baieztatzeko. Ez gogortu error.message osoa: motorrak eta bertsioek desberdin idazten dute.

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

1. Komatxo bakunak bikoitzen ordez erabiltzea

{‘name’:‘Alex’} JSON baliogabea da. {“name”:“Alex”} baliozkoa da. JSON kateek eta objektu-kide izenek komatxo bikoitzak erabiltzen dituzte. const user = { name: ‘Alex’ } bezalako JavaScript objektu-literala JavaScript legezkoa izan daiteke eta, hala ere, ez JSON testua.

Baliogabea

{'name':'Alex'}

Baliozkoa

{"name":"Alex"}

2. Amaierako komak

Azken propietatearen edo array-elementuaren ondorengo koma ez da JSON estandar baliozkoa. {“name”:“Alex”,“age”:30,} eta [1, 2, 3,] biak huts egiten dute. Hartu hau Unexpected token kausa bat bezala; JSON akats ohikoak: amaierako koma, komatxoak eta Unexpected token-k amaierako komak sakonago lantzen ditu.

Baliogabea

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

Baliozkoa

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

3. Komatxorik gabeko propietate-izenak

{ name: “Alex” } JavaScript objektu-literala izan daiteke. JSON-en, kide-izenak kateak dira eta komatxo bikoitzak behar dituzte: {“name”:“Alex”}.

Baliogabea

{
  name: "Alex"
}

Baliozkoa

{
  "name": "Alex"
}

4. Kate-ihes baliogabea

JSON testuan alderantzizko barra batek ihesa hasten du. C:\Users\Alex bezalako bide gordinak baliogabea da, \U ihes legalik ez delako. Bikoiztu alderantzizko barrak. Ez nahastu ostalari-lengoaiaren ihesa JSON ihesarekin. JSON akats ohikoak: amaierako koma, komatxoak eta Unexpected token-k hau sakonago lantzen du.

Baliogabea

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

Baliozkoa

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

5. JSON aurreko edo ondorengo testu gehigarria

JSON.parse-ek JSON balio bakarra espero du. Success: bezalako aurrizkia {“ok”:true} aurretik, edo done atzizkia ondoren, kate osoa baliogabe uzten du. JSON balio bakarraren inguruko zuriune hutsa baimenduta dago. JSON-ek ez du debekatzen balioaren aurreko edo ondorengo zuriunerik.

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

6. HTML JSON gisa aztertzea

response.json() HTML orrialde bati deitzea Unexpected token kasu ohikoa da. Endpoint okerrak, 404 edo 500 HTML orriak, saio-bideratzeak, proxy-gorputzak eta ordezko orriak maiz markaketarekin hasten dira. «Unexpected token < beti HTML da» oso sendoa da: < pista da, ez froga.

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

Zer esan nahi du ohi “Unexpected token <”-ek?

JSON balioak ez dira ohi <rekin hasten. Gorputza edo rekin hasten bada, < lehen karaktere ilegala izan daiteke. Tokiko arazketan, begiratu HTTP egoera, Content-Type eta gorputz gordina. Motorraren idazkera oraindik aldatzen da.

Egiaztatu erantzuna aztertu aurretik

fetch gorputza behin bakarrik kontsumi daiteke. Tokiko arazketan, irakurri text() lehenik, ikuskatu aurrizki labur bat, gero JSON.parse kate berari. Ez deitu response.json() eta gero response.text() erantzun berari. Ez erregistratu ekoizpeneko karga sentikorrak lehenetsita.

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

Zer esan nahi du “at position 123”-ek?

Motor batzuek posizio, lerro edo zutabe bat jakinarazten dute. Begiratu gertu komatxo, koma, giltza edo ihes okerrik. Indize hori analisiak arazoa nabaritu zuen lekua da; benetako kausa lehenago egon daiteke. Ez dago bermatuta karaktere akastun zehatza izango denik.

Unexpected token Unexpected end-en aurka

Unexpected token-ek esan nahi du analizatzaileak espero ez zuen karaktere batekin egin duela topo. Unexpected end ager daiteke sarrera balioa osatu aurretik gelditzen denean, {“name”:“Alex” ixteko giltzarik gabe bezala. Hitz zehatzak motorraren araberakoak dira. JSON akats ohikoak: amaierako koma, komatxoak eta Unexpected token-k JSON osatugabea zabalago lantzen du.

{"name":"Alex"

JSON ez da JavaScript objektu-literal bera

JSON datu-formatua da. JavaScript objektu-literala JavaScript sintaxia da. Komatxorik gabeko gakoak, komatxo bakunak eta amaierako koma dituen JS objektua ez da JSON testu baliozkoa. JSON.parse-ek ezin du segurtasunez JavaScript objektu-literalik aztertu.

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

JSON-ek iruzkinak izan ditzake?

JSON estandarrak ez du iruzkinik onartzen. Objektu barruko // lerroa baliogabea da. JSON5 eta antzeko luzapenak formatu desberdinak dira. JSON formatzailea eta konparaketa-ek JSON estandarra JSON.parse-ekin balioztatzen du eta ez du JSON5 JSON gisa hartzen.

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

undefined, NaN eta Infinity JSON baliozkoak dira?

Ez. JSON balioak objektua, array, katea, zenbakia, true, false eta null dira. undefined, NaN eta Infinity ez. Goiko mailako balioak ez du objektua edo array izan behar: true, 123, “hello” eta null JSON baliozkoa dira.

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

Nola konpondu Unexpected token errorea urratsez urrats

Lan egin iturrian, ez errore-katean:

  1. Berretsi sarrera benetan JSON dela, ez HTML, erregistro edo JavaScript.
  2. Ikuskatu sarrera gordinaren lehen karaktereak.
  3. API batetik badator, egiaztatu HTTP egoera eta Content-Type. Ez 200ek ez application/json-ek ez dute JSON baliozkoa bermatzen.
  4. Balioztatu sintaxia JSON analizatzaile batean.
  5. Erabili jakinarazitako posizio, lerro edo zutabea pista gisa, ez kausa-erro bermatua gisa.
  6. Egiaztatu komatxoak, komak, giltzak, kortxeteak eta ihesak eremu horren inguruan.
  7. Alderatu kopia formatu eta balioztatu batekin.
  8. Konpondu serializatzailea edo endpoint-a. Ez ezabatu jakinarazitako tokena ausaz.
Ez «konpondu» JSON komatxoak ausaz ordezkatuz

' karaktereak " karaktereekin ordezkatze globalak kate barruko apostrofoak, ihes egindako testua eta JSON ez diren iturriak hautsi ditzake. Ekoitzi JSON baliozkoa benetako serializatzailetik. Ez hartu eval JSON analizatzaile gisa.

Erabili JSON.stringify() JavaScript-en JSON ekoiztean

Hobetsi JSON.stringify kateak eskuz lotzea baino. Serializatzen dituen balioetarako JSON testu baliozkoa igortzen du. Ez ditu JavaScript balio guztiak gordetzen: undefined, funtzioek eta ikurrek portaera berezia dute. Xehetasun hori hemen esparrutik kanpo dago.

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

JSON baliogabea benetako zuzenketaren aurka

Bikote hauek JSON.parse-ekin egiaztatu ziren. HTML-rako, zuzenketa erantzuna da, ez sintaxi-edizioa.

Arazoa Baliogabea Zuzenketa
Komatxo bakunak {'a':1} {"a":1}
Amaierako koma {"a":1,} {"a":1}
Komatxorik gabeko gakoa {a:1} {"a":1}
undefined {"a":undefined} {"a":null}
HTML gorputza <html>... Egiaztatu endpoint-a eta erantzun gordina. Ez editatu HTML JSON bihurtzeko.

Unexpected token erabaki-gida sinplea

JSON.parse huts egin badu, erabaki JSON duzun ere komatxoak berridatzi aurretik.

  • JSON.parse-ek huts egin du
  • API batetik? Egiaztatu egoera, Content-Type eta gorputz gordina
  • JSON gisa hasten da? Ez bada, konpondu iturria edo endpoint-a
  • Bai bada, balioztatu komatxoak, komak, giltzak, kortxeteak, ihesak, onartu gabeko balioak
  • Erabili jakinarazitako posizioa pista gisa
  • Konpondu iturria eta aztertu berriro
Unexpected token-ek ezustekoa izendatzen du. Testuaren iturria da askotan benetako zuzenketa.

Balioztatu JSON aztertu edo erabili aurretik

NEXNARA JSON formatzailea eta konparaketa-ek JSON nabigatzailean JSON.parse-ekin balioztatzen du—ez eval.

Balioztatu, edertu 2 zuriunerekin, 4 zuriunerekin edo tabuladoreekin, minify, kopiatu, deskargatu eta igo .json. JSON Diff-ek objektu eta array habiaratuak, bideak, laburpena, iragazkiak eta trukea lantzen ditu. Azterketaren ondoren, datu beraren kopia edertuak eta minify-atuak berdin alderatzen dira; objektu-gakoak izenaren arabera alderatzen dira.

5 MB baino testu handiagoa motela senti daiteke. 15 MB baino testu handiagoa ez da nabigatzailean prozesatzen.

JSON balioztatzea eta formatatzea zure nabigatzailean gertatzen da. Tresna honek ez du JSON NEXNARA zerbitzari batera bidaltzen. Iragarkiek eta guneko beste ezaugarriek oraindik sarea erabiltzen dute.

Itsatsi huts egiten duen katea JSON formatzailea eta konparaketa-en eta irakurri lehen karaktereak komatxoak berridatzi aurretik.

FAQ

Zergatik dio JSON.parse-ek Unexpected token?

Testua ez da JSON baliozkoa analizatzailea geratu den puntuan. Kausa ohikoak komatxoak, komak, testu gehigarria edo HTML bezalako JSON ez den gorputza dira.

Zer esan nahi du Unexpected token < in JSON-ek?

Lehen karaktere ilegala < izan daiteke. Horrek maiz HTML orrialde batera apuntatzen du, baina ez da 404-aren edo kasu guztietan HTML-aren froga. Egiaztatu egoera, Content-Type eta gorputz gordina.

Nola aurkitzen dut errorearen posizioa JSON-en?

Motorrak posizio, lerro edo zutabe bat jakinarazten badu, begiratu gertu. Benetako hutsegitea lehenago egon daiteke. Erabili pista gisa, gero balioztatu.

JSON-ek komatxo bakunak erabil ditzake?

Ez. JSON estandarrean kateek eta kide-izenek komatxo bikoitzak erabiltzen dituzte.

JSON-ek amaierako komak izan ditzake?

Ez. JSON estandarrak ez du onartzen azken propietatearen edo array-elementuaren ondorengo komarik.

Nola egiazta dezaket kate bat JSON baliozkoa den?

Deitu JSON.parse try/catch batean, edo itsatsi testua JSON formatzailea eta konparaketa-en. Azterketak SyntaxError jaurtitzen badu, katea ez da JSON baliozkoa.