Kiểm tra & tạo JSON Schema
Đối chiếu JSON với schema, hoặc suy ra schema từ dữ liệu mẫu
Về công cụ này
Hai chiều của cùng một công việc: dán JSON mẫu vào để nhận về một schema draft-07 suy ra từ đó, hoặc dán cả dữ liệu lẫn schema để thấy mọi vi phạm được liệt kê kèm đường dẫn JSON của nó. Việc kiểm tra chạy trên Ajv — chính bộ máy mà phần lớn dịch vụ Node dùng — nên cái gì qua được ở đây thì cũng qua được trên CI.
Phần suy diễn được làm với đầu óc thực chiến: khóa của đối tượng trở thành thuộc tính có kiểu và mục required, mảng gộp hình dạng của mọi phần tử, số nguyên được phân biệt với số thực, còn những khóa chỉ xuất hiện ở vài phần tử mảng sẽ được để ra ngoài required một cách đúng đắn. Kết quả là điểm khởi đầu để bạn siết chặt thêm bằng format, khoảng giá trị và mẫu.
Phản hồi API và tệp cấu hình đúng là loại dữ liệu bạn ít muốn đặt trên máy chủ bên thứ ba nhất. Cả việc suy diễn lẫn việc kiểm tra đều chạy hoàn toàn trong trình duyệt của bạn.
Câu hỏi thường gặp
- Bản draft nào của JSON Schema được hỗ trợ?
- Phần suy diễn sinh ra draft-07, bản được hỗ trợ rộng rãi nhất trên các trình soạn thảo và trình kiểm tra. Phần kiểm tra chấp nhận draft-07 cùng những bản cũ hơn mà Ajv hiểu ở chế độ không nghiêm ngặt; các từ khóa của 2019-09/2020-12 phần lớn cũng chạy, vì từ khóa lạ chỉ bị bỏ qua chứ không gây lỗi chết.
- Dấu $ trong đường dẫn vi phạm nghĩa là gì?
- Đó là gốc của tài liệu, theo kiểu JSONPath: $.age nghĩa là thuộc tính age ở cấp cao nhất, còn $.items.2.name là trường name của phần tử mảng thứ ba. Đường dẫn rỗng ($) nghĩa là vi phạm nằm ở chính gốc tài liệu — sai kiểu, hoặc thiếu một thuộc tính bắt buộc.
- Vì sao schema suy ra lại chặt hơn hoặc lỏng hơn tôi tưởng?
- Nó mô tả đúng cái mẫu bạn đưa vào: trường nào có mặt ở mọi nơi thì thành bắt buộc, và chỉ những kiểu đã quan sát được mới được cho phép. Muốn schema tổng quát hơn, hãy đưa vào mẫu đa dạng hơn (một mảng gồm các đối tượng tiêu biểu) rồi chỉnh tay — phép suy diễn không thể đoán được ý định của bạn.
- Việc kiểm tra có hỗ trợ format, pattern và các từ khóa ràng buộc khác không?
- Các từ khóa về cấu trúc (type, required, properties, items, enum, minimum, pattern…) được áp dụng đầy đủ. Còn những chuỗi format như "email" hay "date-time" thì không bị bắt buộc kiểm chứng — điều này phản ánh đúng đặc tả JSON Schema, nơi format mặc định chỉ là chú thích, và giúp bạn tránh cảm giác an tâm giả tạo.