Unexpected token JSON — quick fix | Map sang bài lỗi đầy đủ
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.parselầ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
- Chép message đầy đủ — token (
],},',<,u,/…) vàposition Nnếu có. - Đối chiếu bảng bên dưới — đoán nguyên nhân trong 10 giây.
- Dán raw vào JSON formatter — tool báo JSON không hợp lệ; khoanh chỗ gần lỗi.
- Sửa nguồn — serializer API, file
config.json, đoạn copy từ chat. Tránhstr.replace(/,\s*]/g, '')kiểu vá mù. - Parse lại —
JSON.parsehoặc Format thành công. Vẫn fail / lặp lại → bài đầy đủ.
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
| 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.parse → Unexpected token <. Quick fix: đọc res.status và Content-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ứng | Lớp lỗi | Việc làm ngay |
|---|---|---|
SyntaxError: Unexpected token … | Cú pháp JSON | Bài này → formatter |
| Nest/Express 400, message field | Schema / DTO | Validate trước debug |
| 200 nhưng UI thiếu field | Contract / path | Pretty-print rồi soi key — pretty-print |
Unexpected end of JSON input | Chuỗi rỗng / cắt giữa chừng | Kiể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ống | Vì sao cần bài đầy đủ |
|---|---|
| Cùng lỗi trên nhiều môi trường | Cần sửa serializer / CI, không chỉ 1 file |
Paste Console chạy, JSON.parse fail | Hiểu object literal vs JSON |
position N trên file lớn | Binary search / nhảy cột đúng cách |
| Token không có trong bảng trên | BOM, escape log, cắt chuỗi, concat tay |
Muốn gắn jq / jsonlint vào CI | Checklist 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:
- Quick fix cú pháp (bài này)
- Pretty-print để đọc cấu trúc — Pretty-print JSON là gì
- 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
- Công cụ: JSON formatter
- Đầy đủ: Unexpected token — trailing comma & vị trí lỗi
- Pretty-print: Pretty-print JSON là gì / khi nào cần
- Workflow Nest: Validate JSON trước debug
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.