Cách Xác Thực JSON: Hướng Dẫn Đầy Đủ Với Ví Dụ
JSON (JavaScript Object Notation) là nền tảng của API web hiện đại, file cấu hình và trao đổi dữ liệu. Nhưng JSON không hợp lệ có thể khiến ứng dụng crash, tích hợp API thất bại và gây ra hàng giờ gỡ lỗi. Hướng dẫn này sẽ đưa bạn qua mọi thứ cần biết về xác thực JSON, từ kiểm tra cú pháp cơ bản đến xác thực Schema nâng cao với ví dụ thực tế.
Tại Sao Xác Thực JSON Quan Trọng
JSON không hợp lệ là một trong những nguồn lỗi phổ biến nhất trong ứng dụng web. Một dấu phẩy đặt sai vị trí, khóa không đặt trong dấu ngoặc kép hoặc dấu phẩy cuối cùng có thể khiến JSON.parse() ném ra SyntaxError, làm sập toàn bộ pipeline dữ liệu. Xác thực giúp phát hiện sớm những lỗi này trước khi chúng lan truyền vào hệ thống và gây ra lỗi downstream.
Ngoài tính đúng đắn cú pháp, xác thực còn đảm bảo dữ liệu JSON tuân thủ cấu trúc mong đợi. API có thể trả về JSON hợp lệ nhưng thiếu trường bắt buộc, kiểu dữ liệu sai hoặc giá trị nằm ngoài phạm vi chấp nhận được. Xác thực Schema giải quyết những vấn đề cấu trúc này.
Quy Tắc Cú Pháp JSON
Trước khi đi sâu vào công cụ xác thực, hiểu các quy tắc làm cho JSON hợp lệ là rất quan trọng. JSON có cú pháp nghiêm ngặt được định nghĩa bởi RFC 8259, và chỉ một vi phạm ký tự cũng có thể làm toàn bộ tài liệu không hợp lệ.
Chuỗi Phải Dùng Dấu Ngoặc Kép
Tất cả giá trị chuỗi và khóa đối tượng phải được đặt trong dấu ngoặc kép. Dấu ngoặc đơn không phải là dấu phân cách chuỗi JSON hợp lệ, đây là lỗi phổ biến của nhà phát triển chuyển từ JavaScript.
// Invalid - single quotes
{'name': 'Alice', 'age': 30}
// Valid - double quotes
{"name": "Alice", "age": 30}Khóa Đối Tượng Phải Đặt Trong Dấu Ngoặc Kép
Không giống JavaScript object literal, JSON yêu cầu tất cả khóa đối tượng phải được đặt trong dấu ngoặc kép. Khóa không đặt trong dấu ngoặc kép là lỗi cú pháp.
// Invalid - unquoted keys
{name: "Alice", age: 30}
// Valid - quoted keys
{"name": "Alice", "age": 30}Không Cho Phép Dấu Phẩy Cuối Cùng
JSON không cho phép dấu phẩy sau mục cuối cùng trong đối tượng hoặc mảng. Đây là một lỗi phổ biến khác, đặc biệt khi chỉnh sửa JSON thủ công.
// Invalid - trailing comma
{
"name": "Alice",
"age": 30,
}
// Valid - no trailing comma
{
"name": "Alice",
"age": 30
}Không Hỗ Trợ Chú Thích
JSON không hỗ trợ chú thích. Cả // chú thích một dòng và /* */ chú thích nhiều dòng đều không hợp lệ trong JSON. Nếu cần tài liệu, hãy sử dụng file riêng hoặc định dạng như JSONC.
Lỗi Xác Thực JSON Phổ Biến
Hiểu các lỗi phổ biến nhất giúp bạn nhanh chóng phát hiện và sửa chúng. Dưới đây là những lỗi bạn sẽ gặp nhiều nhất:
- Token không mong đợi: Thường do dấu ngoặc đơn, khóa không đặt trong dấu ngoặc kép hoặc dấu phẩy cuối cùng. Thông báo lỗi chứa vị trí phân tích thất bại.
- Kết thúc đầu vào JSON không mong đợi: Chuỗi JSON không đầy đủ hoặc rỗng. Điều này thường xảy ra khi yêu cầu mạng trả về phản hồi rỗng.
- Ký tự không phải khoảng trắng không mong đợi: Nội dung bổ sung sau giá trị JSON chính, như đối tượng thứ hai không được bọc trong mảng.
- Số không hợp lệ: Số có số 0 đứng đầu (trừ chính 0), ký hiệu thập lục phân hoặc giá trị NaN/Infinity không phải là JSON hợp lệ.
Xác Thực JSON Trong JavaScript
Trong JavaScript, cách đơn giản nhất để xác thực JSON là bọc JSON.parse() trong khối try-catch. Nếu JSON không hợp lệ, phương thức sẽ ném ra SyntaxError.
function validateJSON(jsonString) {
try {
JSON.parse(jsonString);
return { valid: true };
} catch (error) {
return {
valid: false,
error: error.message
};
}
}
const result = validateJSON('{"name": "Alice"}');
console.log(result);
// { valid: true }
const badResult = validateJSON("{'name': 'Alice'}");
console.log(badResult);
// { valid: false, error: "Unexpected token '..." }Xác Thực JSON Trong Python
Python cung cấp module json với json.loads() để phân tích chuỗi JSON. Tương tự JavaScript, JSON không hợp lệ sẽ raise json.JSONDecodeError với thông tin vị trí chi tiết.
import json
def validate_json(json_string):
try:
json.loads(json_string)
return {"valid": True}
except json.JSONDecodeError as e:
return {
"valid": False,
"error": str(e),
"line": e.lineno,
"column": e.colno
}
result = validate_json('{"name": "Alice"}')
print(result)
# {'valid': True}Xác Thực JSON Schema
Xác thực cú pháp chỉ cho bạn biết JSON có định dạng đúng không. JSON Schema cho phép bạn định nghĩa cấu trúc mong đợi và xác thực dữ liệu theo nó. Schema chỉ định trường bắt buộc, kiểu dữ liệu, phạm vi giá trị, mẫu chuỗi và cấu trúc đối tượng lồng nhau.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["name", "email"],
"properties": {
"name": { "type": "string", "minLength": 1 },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 0 }
}
}Các trình xác thực JSON Schema phổ biến bao gồm Ajv cho JavaScript, jsonschema cho Python và json-schema-validator cho Java. Các thư viện này xác thực dữ liệu JSON theo Schema của bạn và tạo thông báo lỗi chi tiết cho từng vi phạm.
Công Cụ Xác Thực JSON Trực Tuyến
Khi bạn cần kiểm tra nhanh tài liệu JSON mà không cần viết code, trình xác thực trực tuyến là lựa chọn nhanh nhất. Chúng cung cấp phản hồi tức thì với đánh dấu lỗi và số dòng.
Thực Hành Tốt Nhất Xác Thực JSON
- Xác thực sớm: Kiểm tra JSON tại ranh giới hệ thống (như API endpoint và hàm import file), trước khi dữ liệu vào logic nghiệp vụ.
- Sử dụng xác thực Schema: Ngoài cú pháp, sử dụng JSON Schema để xác thực cấu trúc dữ liệu, phát hiện trường thiếu, kiểu sai và giá trị ngoài phạm vi.
- Cung cấp thông báo lỗi rõ ràng: Khi xác thực thất bại, bao gồm đường dẫn trường, kiểu mong đợi và giá trị thực tế để giúp người dùng nhanh chóng sửa lỗi.
- Xác thực cả client và server: Xác thực phía client cung cấp phản hồi tức thì, trong khi xác thực phía server đảm bảo an ninh và toàn vẹn dữ liệu.
- Tự động hóa xác thực trong CI/CD: Sử dụng công cụ như ajv-cli hoặc jsonschema để xác thực JSON fixture và file cấu hình trong pipeline build.
- Ghi log lỗi xác thực: Ghi lại lỗi xác thực với ngữ cảnh để xác định mẫu và sửa nguyên nhân gốc trong nơi tạo dữ liệu.
Sẵn sàng xác thực dữ liệu JSON của bạn? Hãy dùng thử trình xác thực JSON trực tuyến miễn phí của chúng tôi, cung cấp phát hiện lỗi tức thì và phản hồi chi tiết.
Xác Thực JSON NgayCâu Hỏi Thường Gặp
Xác Thực JSON Là Gì?
Xác thực JSON là quá trình kiểm tra xem tài liệu JSON có tuân thủ quy tắc cú pháp đúng và tùy chọn tuân thủ Schema đã định nghĩa không. Xác thực cú pháp đảm bảo JSON có định dạng đúng, trong khi xác thực Schema đảm bảo cấu trúc dữ liệu khớp với kiểu, trường bắt buộc và ràng buộc giá trị mong đợi.
Lỗi JSON Phổ Biến Nhất Là Gì?
Các lỗi JSON phổ biến nhất bao gồm: dấu phẩy cuối cùng sau mục cuối, sử dụng dấu ngoặc đơn thay vì dấu ngoặc kép, khóa đối tượng không đặt trong dấu ngoặc kép, chú thích (không được phép trong JSON) và giá trị undefined hoặc NaN. Những lỗi này khiến JSON.parse() ném ra SyntaxError.
Làm Thế Nào Để Xác Thực JSON Trong JavaScript?
Sử dụng JSON.parse() được bọc trong khối try-catch. Nếu JSON không hợp lệ, JSON.parse() sẽ ném ra SyntaxError mà bạn có thể bắt và xử lý. Đối với xác thực Schema, sử dụng thư viện như Ajv triển khai xác thực JSON Schema.
JSON Schema Là Gì?
JSON Schema là từ vựng cho phép bạn chú thích và xác thực tài liệu JSON. Nó định nghĩa cấu trúc, kiểu, trường bắt buộc, phạm vi giá trị, mẫu chuỗi và cấu trúc đối tượng lồng nhau mong đợi. Bạn có thể sử dụng nó để xác thực dữ liệu JSON tuân thủ định dạng cụ thể ngoài kiểm tra cú pháp cơ bản.
Có Thể Xác Thực JSON Trực Tuyến Không?
Có, các công cụ xác thực JSON trực tuyến như ToolHub JSON Validator cho phép bạn dán dữ liệu JSON và xem ngay dữ liệu có hợp lệ không, với thông báo lỗi chi tiết hiển thị dòng và cột chính xác nơi xảy ra lỗi.