Tech Help

ຂໍ້ຜິດ JSON ທົ່ວໄປ: ຈຸດຈອກທ້າຍ, ເຄື່ອງໝາຍຄຳເວົ້າ ແລະ Unexpected token

ແກ້ JSON ບໍ່ຖືກຕ້ອງ: ຈຸດຈອກທ້າຍ, ເຄື່ອງໝາຍຄຳເວົ້າດຽວ, ກະແຈບໍ່ມີເຄື່ອງໝາຍຄຳເວົ້າ ແລະ Unexpected token. ເປັນຫຍັງ JSON.parse ລົ້ມເຫຼວ ແລະວິທີກວດ JSON.

ຄຳຕອບໄວ

ຂໍ້ຜິດ JSON ສ່ວນໃຫຍ່ມາຈາກກົດເຂັ້ມງວດ: ຈຸດຈອກທ້າຍ, ເຄື່ອງໝາຍຄຳເວົ້າດຽວ, ຊື່ຄຸນສົມບັດບໍ່ມີເຄື່ອງໝາຍຄຳເວົ້າ, ຈຸດຈອກຂາດ, ວົງເລັບບໍ່ຄູ່, escape ບໍ່ຖືກ ຫຼື ຄຳເຫັນ.

JSON ເບິ່ງຄືວັດຖຸ JavaScript ແຕ່ເຂັ້ມງວດກວ່າ. ຊື່ຄຸນສົມບັດ ແລະສະຕຣິງຕ້ອງການເຄື່ອງໝາຍຄຳເວົ້າຄູ່.

ຖ້າເຫັນ Unexpected token ອັກສອນທີ່ລາຍງານອາດເປັນບ່ອນທີ່ການແຍກຢຸດ—ບໍ່ຈຳເປັນເປັນບ່ອນທີ່ຂໍ້ຜິດເດີມເລີ່ມ.

JSON ຂອງທ່ານຖືກໝາຍວ່າບໍ່ຖືກຕ້ອງ. ມັກເປັນບັນຫາໄວຍະກອນນ້ອຍ ບໍ່ແມ່ນຮູບແບບໄຟລ໌ເສຍ. ເຈັດຂໍ້ຜິດຂ້າງລຸ່ມເຮັດໃຫ້ເກີດ Unexpected token ສ່ວນໃຫຍ່.

ເປັນຫຍັງ JSON ງ່າຍແຕກແບບນີ້?

JSON ເປັນຮູບແບບຂໍ້ມູນໄວຍະກອນເຂັ້ມງວດ. ລິເຕີຣັນວັດຖຸ JavaScript ອາດເບິ່ງຄືກັນແຕ່ຍັງເປັນ JSON ບໍ່ຖືກ. ໃນ JSON ມາດຕະຖານ ຊື່ຄຸນສົມບັດ ແລະສະຕຣິງຕ້ອງການເຄື່ອງໝາຍຄຳເວົ້າຄູ່, ຈຸດຈອກທ້າຍບໍ່ອະນຸຍາດ ແລະຄຳເຫັນບໍ່ແມ່ນສ່ວນຂອງຮູບແບບ.

1. ຈຸດຈອກທ້າຍ

ຈຸດຈອກເກີນຫຼັງຄຸນສົມບັດສຸດທ້າຍແມ່ນບັນຫາ. JSON ມາດຕະຖານບໍ່ອະນຸຍາດ.

ບໍ່ຖືກ

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

ຖືກ

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

ກົດດຽວກັນກັບອາເຣ. ລຶບຈຸດຈອກຫຼັງລາຍການສຸດທ້າຍ.

ບໍ່ຖືກ

[
  "red",
  "green",
]

ຖືກ

[
  "red",
  "green"
]

2. ເຄື່ອງໝາຍຄຳເວົ້າດຽວແທນຄູ່

JavaScript ມັກຮັບເຄື່ອງໝາຍຄຳເວົ້າດຽວ. JSON ບໍ່ຮັບ. ຊື່ຄຸນສົມບັດ ແລະຄ່າສະຕຣິງຕ້ອງໃຊ້ເຄື່ອງໝາຍຄຳເວົ້າຄູ່.

ບໍ່ຖືກ

{
  'name': 'Alex'
}

ຖືກ

{
  "name": "Alex"
}

3. ຊື່ຄຸນສົມບັດບໍ່ມີເຄື່ອງໝາຍຄຳເວົ້າ

ໃນ JavaScript ບາງຄັ້ງຂຽນ name ໄດ້ໂດຍບໍ່ມີເຄື່ອງໝາຍຄຳເວົ້າ. ໃນ JSON ທຸກຊື່ຄຸນສົມບັດຕ້ອງເປັນສະຕຣິງເຄື່ອງໝາຍຄຳເວົ້າຄູ່.

ບໍ່ຖືກ

{
  name: "Alex",
  age: 30
}

ຖືກ

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

4. ຈຸດຈອກຂາດລະຫວ່າງຄ່າ

ຄຸນສົມບັດ ແລະລາຍການອາເຣຕ້ອງມີຈຸດຈອກລະຫວ່າງ. ຕົວແຍກອາດລາຍງານ Unexpected token ທີ່ເຄື່ອງໝາຍຄຳເວົ້າ ຫຼືວົງເລັບຕໍ່ໄປ ບໍ່ແມ່ນທີ່ຈຸດຈອກຂາດ.

ບໍ່ຖືກ

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

ຖືກ

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

5. ວົງເລັບຂາດ ຫຼືເກີນ

ວັດຖຸໃຊ້ { }. ອາເຣໃຊ້ [ ]. JSON ຊ້ອນກັນມັກລົ້ມເຫຼວເມື່ອ ] ຂາດ, } ເກີນ ຫຼືສະຫຼັບກັນ. ນັບຄູ່ເປີດ ແລະປິດ.

ບໍ່ຖືກ

{
  "items": [1, 2
}

ຖືກ

{
  "items": [1, 2]
}

6. ລຳດັບ escape ບໍ່ຖືກ

ໃນສະຕຣິງ JSON ຂີດຄ້ອມກັບເລີ່ມ escape. ລຳດັບເຊັ່ນ " \ ແລະ \n ຖືກ. ເສັ້ນທາງ Windows ຂຽນ C:\Users ບໍ່ຖືກ: \U ບໍ່ແມ່ນ escape JSON ທີ່ຖືກກົດ. ເຮັດຂີດຄ້ອມກັບສອງເທົ່າ ບໍ່ດັ່ງນັ້ນຕົວແຍກຢຸດທີ່ອັກສອນນັ້ນ.

ບໍ່ຖືກ

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

ຖືກ

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

7. ຄຳເຫັນໃນ JSON

JSON ມາດຕະຖານບໍ່ມີຄຳເຫັນ. ເຄື່ອງມືຕັ້ງຄ່າບາງອັນຮັບ // ຫຼື /* */ (JSONC, JSON5 ແລະຄ້າຍຄື). ນັ້ນບໍ່ແມ່ນ JSON ມາດຕະຖານ ແລະ JSON.parse ປະຕິເສດ.

ບໍ່ຖືກ

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

Unexpected token ໝາຍຄວາມວ່າແນວໃດ?

ຕົວແຍກພົບອັກສອນທີ່ບໍ່ອະນຸຍາດໃນຕຳແໜ່ງນັ້ນ. ຈຸດທີ່ລາຍງານແມ່ນບ່ອນອ່ານຢຸດ. ຖ້າຂ້າມຈຸດຈອກກ່ອນ ຂໍ້ຜິດອາດຊີ້ໄປທີ່ເຄື່ອງໝາຍຄຳເວົ້າຂອງຄຸນສົມບັດຕໍ່ໄປ. ຄຳເວົ້າຕ່າງກັນຕາມເວລາແລ່ນ; ຢ່າຄາດວ່າທຸກບຣາວເຊີພິມປະໂຫຍກດຽວກັນ.

Unexpected end of JSON input ໝາຍຄວາມວ່າແນວໃດ?

ຂໍ້ຄວາມຈົບກ່ອນຄ່າຄົບ. ສາເຫດທົ່ວໄປ: } ຫຼື ] ຂາດ, ການປ້ອນຕັດ, ຮ່າງກາຍຫວ່າງ ຫຼືຄຳຕອບ API ຂາດ. ບໍ່ແມ່ນຂໍ້ຜິດດຽວ.

ເປັນຫຍັງ JSON.parse() ລົ້ມເຫຼວ?

JSON.parse() ຮັບແຕ່ຂໍ້ຄວາມ JSON ທີ່ຖືກ. ນີ້ສຳເລັດ:

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

ນີ້ລົ້ມເຫຼວ ເພາະເຄື່ອງໝາຍຄຳເວົ້າດຽວບໍ່ແມ່ນ JSON:

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

ຂໍ້ຄວາມຜິດທີ່ແນ່ນອນຂຶ້ນກັບເວລາແລ່ນ JavaScript. ຖືຂໍ້ຄວາມເປັນຄຳແນະນໍາ ແລ້ວກວດຈຸດຈອກ, ເຄື່ອງໝາຍຄຳເວົ້າ ແລະວົງເລັບໃກ້ຕຳແໜ່ງນັ້ນ.

JSON ບໍ່ເຫມືອນວັດຖຸ JavaScript

ລິເຕີຣັນວັດຖຸ JavaScript ອາດເບິ່ງຄື { name: 'Alex' }. JSON ທີ່ຖືກຕ້ອງຕ້ອງເບິ່ງຄື { "name": "Alex" }: ຊື່ ແລະສະຕຣິງເຄື່ອງໝາຍຄຳເວົ້າຄູ່, ບໍ່ມີຈຸດຈອກທ້າຍ, ບໍ່ມີຄຳເຫັນ.

  • ຂໍ້ຄວາມ JSON
  • ຕົວແຍກອ່ານໂທເຄັນ
  • ຂໍ້ມູນຖືກ ຫຼື Unexpected token
ເຄື່ອງໝາຍຜິດແມ່ນບ່ອນການແຍກຢຸດ ເຊິ່ງອາດຢູ່ຫຼັງຂໍ້ຜິດຈິງ.

ວິທີຫາຂໍ້ຜິດ JSON ໃຫ້ໄວ

ເຮັດຕາມລຳດັບນີ້. ຢ່າເລີ່ມດ້ວຍການຂຽນໄຟລ໌ທັງໝົດໃໝ່.

  1. ສົ່ງ JSON ຜ່ານຕົວກວດ.
  2. ອ່ານຂໍ້ຜິດທຳອິດທີ່ລາຍງານ.
  3. ເບິ່ງໜ້ອຍໜຶ່ງກ່ອນຕຳແໜ່ງທີ່ລາຍງານ.
  4. ກວດຈຸດຈອກ ໂດຍສະເພາະທ້າຍ ແລະຂາດ.
  5. ກວດເຄື່ອງໝາຍຄຳເວົ້າ: ຄູ່ເທົ່ານັ້ນ.
  6. ຈັບຄູ່ { } ແລະ [ ].
  7. ກວດ escape ຂີດຄ້ອມກັບໃນສະຕຣິງ.
  8. ລຶບຄຳເຫັນຖ້າຕ້ອງການ JSON ເຂັ້ມງວດ.

ແຜນທີ່ໄວຂອງການແກ້ທົ່ວໄປ:

ບັນຫາ ການແກ້
ຈຸດຈອກທ້າຍລຶບຈຸດຈອກຫຼັງລາຍການສຸດທ້າຍ.
ເຄື່ອງໝາຍຄຳເວົ້າດຽວໃຊ້ເຄື່ອງໝາຍຄຳເວົ້າຄູ່ສຳລັບຊື່ ແລະສະຕຣິງ.
ກະແຈບໍ່ມີເຄື່ອງໝາຍຄຳເວົ້າຫໍ່ຊື່ຄຸນສົມບັດດ້ວຍເຄື່ອງໝາຍຄຳເວົ້າຄູ່.
ຈຸດຈອກຂາດວາງຈຸດຈອກລະຫວ່າງຄຸນສົມບັດ ຫຼືລາຍການອາເຣ.
ວົງເລັບຂາດປິດທຸກຄູ່ { } ແລະ [ ].
escape ບໍ່ຖືກໃຊ້ escape ທີ່ຖືກກົດ ຫຼືເຮັດຂີດຄ້ອມກັບສອງເທົ່າໃນເສັ້ນທາງ.
ຄຳເຫັນລຶບ // ແລະ /* */ ສຳລັບ JSON ມາດຕະຖານ.

ກວດ ແລະຈັດຮູບແບບ JSON ໃນບຣາວເຊີ

NEXNARA ຈັດ JSON / Diff ສາມາດກວດ JSON ໃນອຸປະກອນນີ້.

ທ່ານສາມາດກວດ, ເຮັດໃຫ້ງາມດ້ວຍຊ່ອງ 2, ຊ່ອງ 4 ຫຼືແທັບ, minify, ປຽບທຽບເອກະສານສອງສະບັບ (JSON Diff) ແລະເປີດໄຟລ໌ .json. ການແຍກໃຊ້ JSON.parse ໃນບຣາວເຊີ ບໍ່ແມ່ນ eval.

ເອກະສານໃຫຍ່ກວ່າ 5 MB ອາດຊ້າ. ຂໍ້ຄວາມໃຫຍ່ກວ່າ 15 MB ບໍ່ຖືກປະມວນຜົນໃນບຣາວເຊີ ເພື່ອໃຫ້ໜ້າຍັງຕອບສະໜອງ.

ການປະມວນຜົນ JSON ເອງເກີດໃນບຣາວເຊີຂອງທ່ານ. ຂໍ້ຄວາມບໍ່ຖືກສົ່ງໄປເຊີບເວີ NEXNARA ສຳລັບເຄື່ອງມືນີ້. ໂຄສະນາ ແລະຄຸນສົມບັດເວັບອື່ນຍັງໃຊ້ເຄືອຂ່າຍ; ນັ້ນແຍກຈາກການປະມວນຜົນ.

ຕ້ອງກວດ JSON ບໍ່ຖືກ? ເປີດ ຈັດ JSON / Diff ແລະວາງຂໍ້ຄວາມ.

FAQ

ເປັນຫຍັງ JSON ຂອງຂ້ອຍຈຶ່ງເວົ້າ Unexpected token?

ຕົວແຍກພົບອັກສອນທີ່ບໍ່ອະນຸຍາດຢູ່ບ່ອນນັ້ນ. ຂໍ້ຜິດຈິງ—ມັກຈຸດຈອກຂາດ ຫຼືເຄື່ອງໝາຍຄຳເວົ້າດຽວ—ອາດຢູ່ກ່ອນຕຳແໜ່ງນັ້ນເລັກນ້ອຍ.

ຈຸດຈອກທ້າຍອະນຸຍາດໃນ JSON ບໍ?

ບໍ່. JSON ມາດຕະຖານບໍ່ອະນຸຍາດຈຸດຈອກຫຼັງຄຸນສົມບັດ ຫຼືລາຍການອາເຣສຸດທ້າຍ. ລິເຕີຣັນວັດຖຸ JavaScript ມັກອະນຸຍາດ.

JSON ໃຊ້ເຄື່ອງໝາຍຄຳເວົ້າດຽວໄດ້ບໍ?

ບໍ່. ຊື່ຄຸນສົມບັດ ແລະສະຕຣິງຕ້ອງໃຊ້ເຄື່ອງໝາຍຄຳເວົ້າຄູ່.

JSON ມີຄຳເຫັນໄດ້ບໍ?

ບໍ່ໃນ JSON ມາດຕະຖານ. ເຄື່ອງມືບາງອັນຮັບ JSONC ຫຼື JSON5 ທີ່ມີຄຳເຫັນ; JSON.parse ຍັງປະຕິເສດ.

ເປັນຫຍັງ JSON.parse() ລົ້ມເຫຼວ?

ສະຕຣິງບໍ່ແມ່ນ JSON ທີ່ຖືກ. ສາເຫດທົ່ວໄປແມ່ນຈຸດຈອກທ້າຍ, ເຄື່ອງໝາຍຄຳເວົ້າດຽວ, ກະແຈບໍ່ມີເຄື່ອງໝາຍຄຳເວົ້າ, ຄຳເຫັນ ຫຼືຄ່າຕັດ. ຂໍ້ຄວາມທີ່ແນ່ນອນຂຶ້ນກັບເວລາແລ່ນ.

ຈະກວດວ່າ JSON ຖືກຕ້ອງແນວໃດ?

ວາງໃສ່ຕົວກວດເຊັ່ນ ຈັດ JSON / Diff ຫຼືເອີ້ນ JSON.parse ໃນຄອນໂຊນ. ຖ້າການແຍກໂຍນ ຂໍ້ຄວາມບໍ່ແມ່ນ JSON ທີ່ຖືກ.