ช่วยแก้ปัญหา

ข้อผิดพลาด JSON ที่พบบ่อย: ลูกน้ำท้าย, เครื่องหมายคำพูด และ Unexpected token

แก้ JSON ที่ไม่ถูกต้อง: ลูกน้ำท้าย, อัญประกาศเดี่ยว, คีย์ไม่มีเครื่องหมายคำพูด และ Unexpected token ดูว่าทำไม JSON.parse ล้มเหลว และวิธีตรวจ JSON

คำตอบสั้น

ข้อผิดพลาด JSON ส่วนใหญ่มาจากกฎไวยากรณ์เข้ม: ลูกน้ำท้าย, อัญประกาศเดี่ยว, ชื่อคุณสมบัติไม่มีเครื่องหมายคำพูด, ลูกน้ำหาย, วงเล็บไม่คู่, escape ผิด หรือความคิดเห็น

JSON ดูคล้ายอ็อบเจ็กต์ JavaScript แต่เข้มกว่า ชื่อคุณสมบัติและสตริงต้องใช้อัญประกาศคู่

ถ้าเห็น Unexpected token ตัวอักษรที่รายงานอาจเป็นจุดที่การแยกวิเคราะห์หยุด ไม่ใช่จุดที่ความผิดพลาดเดิมเริ่มเสมอไป

JSON ของคุณถูกทำเครื่องหมายว่าไม่ถูกต้อง มักเป็นปัญหาไวยากรณ์เล็กน้อย ไม่ใช่รูปแบบไฟล์เสีย ทั้งเจ็ดข้อด้านล่างทำให้เกิด Unexpected token ส่วนใหญ่

ทำไม JSON ถึงพังง่าย

JSON เป็นรูปแบบข้อมูลที่มีไวยากรณ์เข้ม อ็อบเจ็กต์ลิเทอรัลของ JavaScript อาจดูคล้ายกันแต่ยังเป็น JSON ที่ไม่ถูกต้อง ใน JSON มาตรฐาน ชื่อคุณสมบัติและสตริงต้องใช้อัญประกาศคู่ ห้ามมีลูกน้ำท้าย และความคิดเห็นไม่ใช่ส่วนของรูปแบบ

1. ลูกน้ำท้าย (Trailing Commas)

ลูกน้ำเกินหลังคุณสมบัติสุดท้ายคือปัญหา 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 ตรวจ JSON บนอุปกรณ์นี้ได้

คุณสามารถตรวจสอบ จัดให้อ่านง่ายด้วยช่องว่าง 2 ช่อง 4 ช่อง หรือแท็บ minify เปรียบเทียบสองเอกสาร (JSON Diff) และเปิดไฟล์ .json การแยกวิเคราะห์ใช้ JSON.parse ในเบราว์เซอร์ ไม่ใช่ eval

เอกสารใหญ่กว่า 5 MB อาจช้า ข้อความใหญ่กว่า 15 MB จะไม่ถูกประมวลผลในเบราว์เซอร์ เพื่อให้หน้ายังตอบสนอง

การประมวลผล JSON เองเกิดในเบราว์เซอร์ของคุณ เครื่องมือนี้ไม่ส่งข้อความไปเซิร์ฟเวอร์ NEXNARA โฆษณาและฟีเจอร์ไซต์อื่นยังใช้เครือข่าย นั่นแยกจากการประมวลผล

ต้องตรวจ JSON ที่ไม่ถูกต้อง? เปิด จัดรูปแบบและเปรียบเทียบ JSON แล้ววางข้อความ

FAQ

ทำไม JSON ของฉันถึงบอก Unexpected token

พาร์เซอร์เจอตัวอักษรที่ไม่ได้รับอนุญาต ณ จุดนั้น ความผิดพลาดจริง—มักเป็นลูกน้ำหายหรืออัญประกาศเดี่ยว—อาจอยู่ก่อนตำแหน่งนั้นเล็กน้อย

JSON อนุญาตลูกน้ำท้ายหรือไม่

ไม่อนุญาต JSON มาตรฐานไม่อนุญาตลูกน้ำหลังคุณสมบัติหรือรายการอาร์เรย์สุดท้าย อ็อบเจ็กต์ลิเทอรัลของ JavaScript มักอนุญาต

JSON ใช้อัญประกาศเดี่ยวได้หรือไม่

ไม่ได้ ชื่อคุณสมบัติและสตริงต้องใช้อัญประกาศคู่

JSON มีความคิดเห็นได้หรือไม่

ใน JSON มาตรฐานไม่ได้ เครื่องมือบางตัวรับ JSONC หรือ JSON5 ที่มีความคิดเห็น JSON.parse ยังปฏิเสธ

ทำไม JSON.parse() ถึงล้มเหลว

สตริงไม่ใช่ JSON ที่ถูกต้อง สาเหตุทั่วไปคือลูกน้ำท้าย อัญประกาศเดี่ยว คีย์ไม่มีเครื่องหมายคำพูด ความคิดเห็น หรือค่าที่ถูกตัด ข้อความที่แน่นอนขึ้นกับรันไทม์

จะตรวจว่า JSON ถูกต้องได้อย่างไร

วางลงตัวตรวจสอบอย่าง จัดรูปแบบและเปรียบเทียบ JSON หรือเรียก JSON.parse ในคอนโซล ถ้าการแยกวิเคราะห์โยนข้อผิดพลาด ข้อความนั้นไม่ใช่ JSON ที่ถูกต้อง