Trợ giúp

JSON Schema Validator online: lỗi kèm đường dẫn và lý do

Với JSON Schema Validator này, bạn dán schema và dữ liệu JSON rồi thấy ngay hai bên có khớp nhau không. Nếu không khớp, mỗi lỗi hiện kèm đường dẫn đến giá trị bị lỗi và lý do dễ hiểu, chẳng hạn $.users[0].email. Công cụ hỗ trợ draft-07, 2019-09 và 2020-12, còn hai ô nhập luôn nằm trên thiết bị của bạn.


Validate JSON online với schema: các bước

  1. Dán schema vào ô JSON Schema (ô hiện “Dán JSON Schema của bạn vào đây...”).
  2. Dán dữ liệu cần kiểm tra vào ô Dữ liệu JSON.
  3. Đọc Kết quả. Kết quả cập nhật khi bạn dán, hoặc khoảng 300 mili giây sau khi bạn ngừng gõ, nên không có nút nào để bấm.
  4. Hợp lệ màu xanh kèm “Dữ liệu JSON khớp với schema.” nghĩa là dữ liệu đạt. “Không hợp lệ: 3 lỗi” màu đỏ liệt kê từng lỗi.
  5. Sửa dữ liệu (hoặc schema), kết quả đổi theo khi bạn chỉnh.

Khi cả hai ô chưa có nội dung, kết quả hiện “Dán schema và dữ liệu JSON để kiểm tra.” Nếu một ô chứa văn bản không phải JSON, một khung đỏ JSON không hợp lệ hiện ra với lý do và “Dòng X, cột Y”, và kết quả cho bạn biết ô nào cần sửa. Muốn dọn một tài liệu lộn xộn trước, “Định dạng JSON” hiển thị cùng dòng và cột cho JSON bị hỏng.

Đọc lỗi: đường dẫn và lý do

Mỗi lỗi có hai phần: đường dẫn và lý do. Đường dẫn bắt đầu từ $, gốc của dữ liệu, rồi theo tên thuộc tính bằng dấu chấm và vị trí trong mảng bằng dấu ngoặc vuông, đếm từ 0. Ví dụ: schema yêu cầu id là số nguyên từ 1, email theo định dạng email và tags không trùng nhau; dữ liệu là {"id":"7","email":"ana@","tags":["a","a"]}. Kết quả ghi “Không hợp lệ: 3 lỗi”:

Tất cả lỗi đều được liệt kê, không chỉ lỗi đầu tiên, nên bạn sửa cả tài liệu trong một lượt. Sau 100 lỗi, danh sách kết thúc bằng một dòng như “và 250 lỗi nữa chưa hiển thị”; con số ở tiêu đề vẫn chính xác. Nếu thiếu một thuộc tính bắt buộc (required), lỗi hiện ở đường dẫn của đối tượng lẽ ra phải chứa nó, ví dụ $.users[0]. Các từ khóa ít gặp hơn (not, contains, propertyNames, dependentRequired và if/then/else) cũng có lý do riêng, rõ ràng.

Chế độ nghiêm ngặt: additionalproperties false

Theo mặc định, schema cho phép thuộc tính thừa: dữ liệu có trường nick mà schema không hề nhắc đến vẫn đạt. Bật Chế độ nghiêm ngặt (“Báo lỗi khi dữ liệu có thuộc tính mà schema không liệt kê.”) để bắt lỗi gõ nhầm và dữ liệu thừa. Với schema ở trên và dữ liệu {"id":1,"email":"ana@example.com","nick":"x"}, kết quả khi tắt chế độ là “Hợp lệ”, còn khi bật là “Không hợp lệ: 1 lỗi” tại $: Thuộc tính không mong đợi “nick”.

Sau công tắc này, công cụ thêm unevaluatedProperties: false vào schema gốc và vào mỗi schema của thuộc tính hoặc phần tử mô tả một đối tượng, kể cả qua $ref. Văn bản của bạn trong ô không bao giờ bị thay đổi.

JSON Schema draft 7, 2019-09 và 2020-12: phiên bản, $ref, định dạng

Công cụ đọc dòng "$schema" trong schema của bạn và áp dụng bộ quy tắc tương ứng: http://json-schema.org/draft-07/schema# được xử lý là draft-07, https://json-schema.org/draft/2019-09/schema là 2019-09 và https://json-schema.org/draft/2020-12/schema là 2020-12. Không có "$schema" thì dùng 2020-12, hoặc 2019-09 nếu cú pháp cũ hơn, như mảng trong items. Draft-04, draft-06 hay bất kỳ địa chỉ nào khác đều không được hỗ trợ, và kết quả cho biết địa chỉ mà schema khai báo. Điều này quan trọng vì một số từ khóa đã đổi giữa các bản: prefixItems thuộc 2020-12, và definitions trở thành $defs ở 2019-09. Cả hai cách viết đường dẫn tham chiếu đều dùng được: #/$defs/name và #/definitions/name.

Giới hạn và quyền riêng tư


Câu hỏi thường gặp

Làm sao để validate JSON schema online bằng công cụ này?

Dán schema vào ô “JSON Schema” và dữ liệu cần kiểm tra vào ô “Dữ liệu JSON”. Kết quả hiện ngay khi bạn dán, hoặc khoảng 300 mili giây sau khi ngừng gõ. “Hợp lệ” màu xanh nghĩa là dữ liệu khớp; “Không hợp lệ” màu đỏ liệt kê từng lỗi kèm đường dẫn và lý do. Không có nút nào để bấm.

Công cụ hỗ trợ phiên bản JSON Schema nào: draft-07, 2019-09 hay 2020-12?

Cả ba. Phiên bản được lấy từ dòng “$schema” trong schema của bạn. Schema không có “$schema” được xử lý là 2020-12, hoặc 2019-09 nếu dùng cú pháp cũ như mảng trong items. Schema khai báo draft-04, draft-06 hay địa chỉ $schema khác sẽ bị báo là không được hỗ trợ.

Đường dẫn như $.users[0].email nghĩa là gì?

Đó là vị trí của giá trị bị lỗi. $ là gốc dữ liệu JSON của bạn, .users là thuộc tính users, [0] là phần tử đầu tiên của mảng đó (đếm từ 0) và .email là thuộc tính bên trong. Đường dẫn như $.users[2].address.zip dẫn đến giá trị theo cách tương tự, từng bước một.

Thuộc tính bắt buộc bị thiếu (JSON Schema required) nghĩa là gì và vì sao lỗi hiện ở đối tượng cha?

Vì thuộc tính bị thiếu nên không có gì để trỏ vào. Lỗi hiện ở đường dẫn của đối tượng lẽ ra phải chứa nó, ví dụ $.users[0], với lý do “Thiếu thuộc tính bắt buộc “email”.” Thêm thuộc tính vào đối tượng đó là lỗi biến mất.

Làm sao để schema từ chối thuộc tính thừa (additionalproperties false)?

Bật “Chế độ nghiêm ngặt”. Chế độ này thêm unevaluatedProperties: false vào schema gốc và vào mỗi schema của thuộc tính hoặc phần tử mô tả một đối tượng, nên mọi thuộc tính mà schema không liệt kê sẽ báo “Thuộc tính không mong đợi”. Schema đã tự đặt additionalProperties hoặc unevaluatedProperties giữ nguyên lựa chọn của nó.

Công cụ có kiểm tra các định dạng như email, date-time, uri và uuid không?

Có. Từ khóa “format” được kiểm tra, nên địa chỉ như ana@ không đạt với chuỗi có “format”: “email” và hiện “Phải khớp với định dạng “email”.” Các định dạng phổ biến đều được hỗ trợ, gồm email, date, date-time, time, uri, uuid, ipv4, ipv6 và hostname.

Có theo được $ref tới tệp khác hoặc một URL không?

Chỉ trong cùng một schema, như #/$defs/name hoặc #/definitions/name. Không có gì được tải xuống, nên tham chiếu như https://example.com/address.json được báo là tham chiếu mà schema không định nghĩa. Hãy sao chép schema được tham chiếu vào $defs của bạn và trỏ $ref tới đó.

“Bản thân schema không hợp lệ” nghĩa là gì?

Schema vi phạm các quy tắc của JSON Schema, ví dụ với “type”: “strng” hoặc “minimum” viết dưới dạng văn bản. Kết quả liệt kê các vấn đề cùng đường dẫn trỏ vào bên trong schema. Dữ liệu chưa được kiểm tra cho đến khi schema được sửa.

Schema hoặc dữ liệu JSON của tôi có bị tải lên đâu không?

Không. Schema và dữ liệu được xử lý hoàn toàn trong trình duyệt của bạn. Không có gì được tải lên hay lưu lại, và bạn không cần tài khoản.