Unexpected token JSON — quick fix | Map sang bài lỗi đầy đủ

(Cập nhật: 19 tháng 7, 2026 ) JSON Unexpected token JSON.parse quick fix SyntaxError debug
Kết luận

Unexpected token = chuỗi chưa phải JSON hợp lệ. Quick fix: đọc token trong message → bảng dưới → dán JSON formatter → sửa nguồn. Bài này là lối tắt; chi tiết trailing comma, nháy đơn, position, bẫy Console nằm ở JSON Unexpected token — bài đầy đủ.

Console đỏ: SyntaxError: Unexpected token ']' in JSON at position 128. Deadline gần, bạn cần sửa trong 5 phút, không cần luận văn về RFC 8259.

Đây là bản ngắn: map token → nguyên nhân hay gặp → hành động. Khi xong quick fix mà vẫn tái phát trên CI, hoặc không hiểu vì sao Console paste chạy được, hãy mở bài lỗi đầy đủ.

Ai nên dùng bài này

  • Junior / intern vừa gặp JSON.parse lần đầu
  • Freelancer nhận log khách “JSON lỗi” và cần trả lời nhanh
  • Ai đã đọc pretty-print (Pretty-print JSON là gì) nhưng format fail ngay

Không thay checklist Nest schema — đó là validate trước debug.


5 bước quick fix

  1. Chép message đầy đủ — token (], }, ', <, u, /…) và position N nếu có.
  2. Đối chiếu bảng bên dưới — đoán nguyên nhân trong 10 giây.
  3. Dán raw vào JSON formatter — tool báo JSON không hợp lệ; khoanh chỗ gần lỗi.
  4. Sửa nguồn — serializer API, file config.json, đoạn copy từ chat. Tránh str.replace(/,\s*]/g, '') kiểu vá mù.
  5. Parse lạiJSON.parse hoặc Format thành công. Vẫn fail / lặp lại → bài đầy đủ.
Đừng làm

eval('(' + text + ')') hoặc new Function('return ' + text)() để “cho chạy được”. Đó là object literal JS, không phải JSON — và mở XSS nếu text đến từ user.


Bảng map token → quick fix

Unexpected token → sửa gì trước
Token / message Nguyên nhân hay gặp Quick fix
Unexpected token ] Trailing comma trong mảng Xóa phẩy trước ]
Unexpected token } Trailing comma trong object Xóa phẩy trước }
Unexpected token ' Nháy đơn thay nháy kép Đổi '...'"..."
Unexpected token / Comment // hoặc /* Xóa comment; JSON chuẩn không cho phép
Unexpected token u undefined trong chuỗi Dùng null hoặc bỏ field; stringify đúng
Unexpected token < Body là HTML (login/404) Kiểm tra status + Content-Type, không parse HTML
Key không quote { id: 1 } kiểu JS Viết { "id": 1 }

Ví dụ 30 giây — trailing comma

Sai (JS ổn, JSON fail):

{
  "sku": "A1",
  "qty": 2,
}

Thường báo gần }. Đúng:

{
  "sku": "A1",
  "qty": 2
}

Ví dụ — nháy đơn

Sai: { 'city': 'Đà Nẵng' }Unexpected token '.

Đúng: { "city": "Đà Nẵng" } — tiếng Việt trong string UTF-8 hoàn toàn OK khi đã quote đúng.

Ví dụ — HTML giả JSON

fetch nhận trang login CDN:

<!DOCTYPE html><html>...

JSON.parseUnexpected token <. Quick fix: đọc res.statusContent-Type trước — đây không phải lỗi dấu phẩy.


Case ngắn: CI đỏ, local xanh

Dev Việt Nam sửa settings.json trong VS Code (JSONC — cho phép //). Local extension im lặng. Pipeline:

node -e "JSON.parse(require('fs').readFileSync('settings.json','utf8'))"

Unexpected token /. Quick fix: bỏ comment và trailing comma; hoặc tách file JSONC (tooling) khỏi file JSON production. Chi tiết bẫy JSONC vs JSON: bài đầy đủ.


Case ngắn: copy từ Slack / Zalo

Khách paste “JSON” vào chat. Bạn copy vào JSON.parse → lỗi ngay. Nguyên nhân thường gặp ở team outsourcing:

  • Chat thêm dấu ` markdown hoặc số thứ tự 1. trước {
  • Tự động đổi " thành dấu ngoặc cong “” (Word / một số bàn phím)
  • Cắt nửa object vì tin nhắn quá dài

Quick fix: mở raw trong editor plain text, xóa ký tự ngoài JSON, đổi ngoặc cong → ", rồi mới dán formatter. Nếu sau khi sạch vẫn fail theo token trong bảng — sửa đúng dòng đó. Nếu sạch rồi mà vẫn không hiểu vì sao DevTools Console lại chạy được đoạn tương tự, đó là lúc cần bài đầy đủ (object literal ≠ JSON).


Phân biệt nhanh với lỗi “gần giống”

Triệu chứngLớp lỗiViệc làm ngay
SyntaxError: Unexpected token …Cú pháp JSONBài này → formatter
Nest/Express 400, message fieldSchema / DTOValidate trước debug
200 nhưng UI thiếu fieldContract / pathPretty-print rồi soi key — pretty-print
Unexpected end of JSON inputChuỗi rỗng / cắt giữa chừngKiểm tra body có bị truncate không

Đừng mất giờ soi ValidationPipe khi JSON.parse chưa qua — middleware body parser đã chết sớm hơn.


Khi nào dừng quick fix và đọc bài dài?

Chuyển sang JSON Unexpected token — trailing comma, nháy đơn và vị trí lỗi nếu:

Tình huốngVì sao cần bài đầy đủ
Cùng lỗi trên nhiều môi trườngCần sửa serializer / CI, không chỉ 1 file
Paste Console chạy, JSON.parse failHiểu object literal vs JSON
position N trên file lớnBinary search / nhảy cột đúng cách
Token không có trong bảng trênBOM, escape log, cắt chuỗi, concat tay
Muốn gắn jq / jsonlint vào CIChecklist deploy trong bài dài

Bài ngắn = triage. Bài dài = playbook.


Pretty-print giúp gì khi đang lỗi?

Nếu chuỗi sai chuẩn, pretty-print không “làm đẹp được” — formatter sẽ báo lỗi. Đó là tín hiệu tốt: bạn đang ở lớp cú pháp, chưa tới schema.

Thứ tự đúng:

  1. Quick fix cú pháp (bài này)
  2. Pretty-print để đọc cấu trúc — Pretty-print JSON là gì
  3. Validate schema / DTO — Format + validate trước Nest

Checklist bỏ túi (copy vào note)

  • Đã đọc token + position?
  • Đã map bảng quick fix?
  • Đã dán formatter (local, che secret)?
  • Đã sửa nguồn, không eval?
  • Parse / Format OK?
  • Lặp lại hoặc CI? → bài đầy đủ

Liên kết

Giữ bài này trong bookmark khi cần map nhanh; mở bài đầy đủ khi cần hiểu và chặn tái phát.