📋
← Quay lại hướng dẫn

Các lỗi cú pháp JSON thường gặp và cách khắc phục bằng trình xác thực

· Thẻ: json, json-errors, json-validation, json-syntax, debugging, developer-tips

Các lỗi JSON thường gặp

Các quy tắc cú pháp nghiêm ngặt của JSON có nghĩa là chỉ một ký tự đặt sai vị trí cũng có thể phá vỡ toàn bộ tài liệu. Hiểu các lỗi JSON phổ biến nhất sẽ giúp bạn gỡ lỗi nhanh hơn và tránh lặp lại cùng một sai lầm. Dưới đây là các vấn đề thường gặp nhất mà nhà phát triển gặp phải, với giải thích rõ ràng và cách khắc phục cho từng lỗi.

1. Dấu phẩy cuối cùng

Lỗi: Unexpected token ở cuối object hoặc array

Dấu phẩy cuối cùng được phép trong JavaScript object và array nhưng bị nghiêm cấm trong JSON.

JSON không hợp lệ:

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

Cách khắc phục: Xóa dấu phẩy sau mục cuối cùng.

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

Array có dấu phẩy cuối cùng:

// Không hợp lệ
[1, 2, 3,]

// Hợp lệ
[1, 2, 3]

2. Thiếu hoặc sai dấu ngoặc kép xung quanh khóa

Lỗi: Unexpected identifier hoặc Expected double-quoted property name

JSON yêu cầu tất cả các khóa object phải được bao bọc trong dấu ngoặc kép. Dấu ngoặc đơn và khóa không có dấu ngoặc kép là không hợp lệ, mặc dù chúng hoạt động trong JavaScript.

JSON không hợp lệ:

{
  name: "Alice",
  'occupation': "Engineer"
}

Cách khắc phục: Luôn bao bọc khóa trong dấu ngoặc kép.

{
  "name": "Alice",
  "occupation": "Engineer"
}

3. Sử dụng dấu ngoặc đơn cho giá trị chuỗi

Lỗi: Unexpected identifier hoặc Unterminated string

Cũng giống như khóa, giá trị chuỗi phải sử dụng dấu ngoặc kép trong JSON. Dấu ngoặc đơn không hợp lệ.

JSON không hợp lệ:

{ "greeting": 'Hello, world!' }

Cách khắc phục: Thay thế dấu ngoặc đơn bằng dấu ngoặc kép.

{ "greeting": "Hello, world!" }

Mẹo: Nếu chuỗi của bạn chứa dấu ngoặc kép, hãy escape chúng bằng dấu gạch chéo ngược: "He said, \"Hello\"".

4. Ký tự đặc biệt không được escape

Lỗi: Unexpected token hoặc Invalid character

Một số ký tự phải được escape trong chuỗi JSON: dấu ngoặc kép ("), dấu gạch chéo ngược (\) và ký tự điều khiển.

JSON không hợp lệ:

{
  "path": "C:\Users\Documents\file.json",
  "quote": "He said "hello""
}

Cách khắc phục: Escape dấu gạch chéo ngược và dấu ngoặc kép đúng cách.

{
  "path": "C:\\Users\\Documents\\file.json",
  "quote": "He said \"hello\""
}

Danh sách đầy đủ các chuỗi escape trong JSON

| Chuỗi | Biểu diễn | |-------|----------| | \" | Dấu ngoặc kép | | \\ | Dấu gạch chéo ngược | | \/ | Dấu gạch chéo xuôi | | \b | Backspace | | \f | Form feed | | \n | Dòng mới | | \r | Carriage return | | \t | Tab | | \uXXXX | Ký tự Unicode (ví dụ: é cho e) |

5. Định dạng số không hợp lệ

Lỗi: Unexpected number hoặc Invalid number

JSON có các quy tắc cụ thể về cách số có thể được định dạng:

  • Số không đứng đầu không được phép (01 không hợp lệ)
  • Một số không đứng đầu duy nhất chỉ được phép cho số 0
  • Số không thể có dấu chấm ở cuối (10. không hợp lệ)
  • Định dạng thập lục phân, bát phân và nhị phân không được hỗ trợ

JSON không hợp lệ:

{
  "invalid1": 01,
  "invalid2": 10.,
  "invalid3": 0xFF,
  "invalid4": 1,000
}

Cách khắc phục:

{
  "valid1": 1,
  "valid2": 10.0,
  "valid3": 255,
  "valid4": 1000
}

6. Giá trị không hợp lệ: undefined, NaN, Infinity

Lỗi: Unexpected token cho undefined, NaN, Infinity

JavaScript có các giá trị không có tương đương trong JSON. Những giá trị này sẽ gây ra lỗi phân tích cú pháp:

JSON không hợp lệ:

{
  "undefinedVal": undefined,
  "notANumber": NaN,
  "infinity": Infinity
}

Cách khắc phục: Thay thế bằng giá trị JSON hợp lệ hoặc sử dụng quy ước.

{
  "undefinedVal": null,
  "notANumber": null,
  "infinity": 1.7976931348623157e+308
}

7. Thừa hoặc thiếu dấu phẩy

Lỗi: Expected comma hoặc Unexpected token

Dấu phẩy trong JSON phải phân tách mọi cặp khóa/giá trị và phần tử array, nhưng không được xuất hiện sau mục cuối cùng.

Thiếu dấu phẩy (không hợp lệ):

{
  "name": "Alice"
  "age": 30
}

Cách khắc phục: Thêm dấu phẩy bị thiếu.

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

8. Vấn đề cấu trúc lồng sâu

Lỗi: Maximum call stack size exceeded hoặc hết thời gian chờ của trình phân tích cú pháp

Mặc dù không phải là lỗi cú pháp, JSON lồng sâu (10+ cấp) có thể gây ra vấn đề hiệu suất và khiến việc gỡ lỗi cực kỳ khó khăn.

Cấu trúc có vấn đề:

{
  "level1": {
    "level2": {
      "level3": {
        "level4": {
          "level5": {
            "level6": {
              "value": "too deep"
            }
          }
        }
      }
    }
  }
}

Cách tiếp cận tốt hơn: Làm phẳng cấu trúc hoặc sử dụng tham chiếu.

{
  "users": {
    "alice": { "role": "admin" }
  },
  "permissions": {
    "admin": ["read", "write", "delete"]
  }
}

9. Thiếu dấu ngoặc nhọn mở hoặc đóng

Lỗi: Expected ',' or '}' hoặc Unexpected end of JSON input

Dấu ngoặc nhọn và ngoặc vuông không khớp là một nguồn lỗi JSON phổ biến, đặc biệt là trong các tệp JSON lớn hoặc viết tay.

JSON không hợp lệ:

{
  "name": "Alice",
  "items": [1, 2, 3
}

Cách khắc phục: Đảm bảo mỗi { có một } khớp và mỗi [ có một ] khớp.

{
  "name": "Alice",
  "items": [1, 2, 3]
}

Mẹo chuyên nghiệp: Thụt lề JSON của bạn đúng cách để khớp trực quan dấu ngoặc mở và đóng. Trình định dạng JSON có thể tự động làm điều này.

Cách gỡ lỗi JSON hiệu quả

  1. Sử dụng trình xác thực JSON -- Dán JSON của bạn vào trình xác thực JSON miễn phí để nhận dòng và cột chính xác của lỗi đầu tiên.
  2. Xác thực từng phần -- Đối với tệp lớn, xác thực từng phần một để cô lập lỗi.
  3. Chú ý các artifact sao chép-dán -- Ký tự vô hình, dấu ngoặc kép thông minh và khoảng trắng không ngắt thường lọt vào từ trình xử lý văn bản hoặc trang web.
  4. Kiểm tra mã hóa ký tự -- Đảm bảo tệp của bạn được lưu dưới dạng UTF-8. Các mã hóa khác có thể tạo ra lỗi vô hình.
  5. Sử dụng linter -- Các công cụ như ESLint với plugin json phát hiện lỗi JSON trong quá trình phát triển.

Hãy nhớ: Trình phân tích cú pháp JSON thường chỉ báo cáo lỗi cú pháp đầu tiên. Sửa lỗi đó, xác thực lại và lặp lại cho đến khi tài liệu vượt qua. Công cụ JSON Formatter & Validator của chúng tôi cung cấp cho bạn thông báo lỗi chi tiết, tức thì để tăng tốc quá trình này.