Trình xác thực & làm đẹp JSON

5 trên 2 xếp hạng

Trình xác thực & làm đẹp JSON là công cụ miễn phí giúp kiểm tra cú pháp JSON có hợp lệ hay không, đồng thời định dạng nội dung hợp lệ để cấu trúc dễ đọc hơn.

Xác thực và làm đẹp JSON có tác dụng gì?

Xác thực JSON kiểm tra xem dữ liệu đầu vào có tuân theo ngữ pháp JSON hay không. Tính năng làm đẹp trình bày các đối tượng và mảng hợp lệ với khoảng trắng cùng mức thụt lề nhất quán. Công cụ này hữu ích khi gỡ lỗi phản hồi API, kiểm tra cấu hình trước khi triển khai hoặc đọc dữ liệu dạng thu gọn do bên thứ ba cung cấp.

Cú pháp JSON nghiêm ngặt hơn cú pháp biểu diễn đối tượng trong JavaScript. Tên thuộc tính phải nằm trong dấu ngoặc kép, chuỗi không được dùng dấu nháy đơn, đồng thời đối tượng và mảng không được có dấu phẩy ở cuối. Chú thích, undefined, NaN và Infinity cũng không thuộc đặc tả JSON.

Công cụ này sử dụng hàm json_decode của PHP trên máy chủ. Dữ liệu bạn nhập được truyền đến máy chủ qua HTTPS và không được lưu trữ. Tuy nhiên, dữ liệu vẫn rời khỏi thiết bị của bạn, vì vậy hãy ẩn mật khẩu, mã truy cập và dữ liệu cá nhân nếu quy định xử lý dữ liệu của tổ chức không cho phép gửi những thông tin đó đến máy chủ bên ngoài.

Làm thế nào để xác thực và làm đẹp JSON?

Dán nội dung vào trường JSON rồi chạy công cụ. Để nhận được kết quả hữu ích, hãy nhập một giá trị JSON hoàn chỉnh thay vì chỉ sao chép một phần của đối tượng từ một dòng nhật ký.

  1. Sao chép phản hồi thô, khối cấu hình hoặc giá trị JSON khác, không kèm các nhãn hiển thị của bảng điều khiển.
  2. Dán nội dung vào trường JSON, giữ nguyên dấu ngoặc kép và ký tự thoát.
  3. Chạy xác thực, sau đó xem kết quả đã định dạng hoặc thông báo lỗi.
  4. Nếu xác thực thất bại, hãy sửa lỗi cú pháp đầu tiên có thể nhận thấy rồi chạy lại. Chỉ một dấu ngoặc kép bị thiếu cũng có thể khiến nhiều ký tự phía sau bị diễn giải sai.

Bốn ký tự khoảng trắng được phép xuất hiện giữa các token JSON gồm dấu cách (U+0020), tab (U+0009), xuống dòng (U+000A) và trở về đầu dòng (U+000D). Chúng không ảnh hưởng đến dữ liệu nên có thể thêm hoặc xóa. Ngược lại, khoảng trắng bên trong chuỗi đặt trong dấu ngoặc kép là một phần của dữ liệu và phải được giữ nguyên. Dấu câu trong chuỗi cũng được bảo toàn, dù dấu ngoặc kép, dấu gạch chéo ngược và ký tự điều khiển cần dùng chuỗi thoát phù hợp.

Đọc kết quả xác thực như thế nào?

Kết quả thành công có nghĩa là PHP đã giải mã được dữ liệu đầu vào dưới dạng JSON. Nếu thất bại, trình phân tích cú pháp không thể hiểu dữ liệu đó như một giá trị JSON hoàn chỉnh và hợp lệ. Sau khi xác thực thành công, tính năng làm đẹp sẽ thể hiện rõ các cấp lồng nhau và ranh giới của đối tượng cũng như mảng.

Các nguyên nhân thường gặp khiến xác thực thất bại gồm:

  • có dấu phẩy thừa ngay trước } hoặc ];
  • tên thuộc tính không có dấu ngoặc kép, chẳng hạn như {name: "Ada"};
  • chuỗi dùng dấu nháy đơn;
  • thiếu dấu phẩy giữa các thuộc tính hoặc phần tử mảng;
  • dấu ngoặc kép hoặc dấu gạch chéo ngược bên trong chuỗi chưa được thoát;
  • đối tượng, mảng hoặc chuỗi chưa hoàn chỉnh;
  • dữ liệu đầu vào UTF-8 không hợp lệ hoặc có ký tự điều khiển thô bên trong chuỗi;
  • phần nguyên có số 0 không cần thiết ở đầu, chẳng hạn như 01 hoặc -01, hay chứa giá trị không thuộc JSON như NaN.

Trường để trống không phải là JSON hợp lệ. Ngược lại, một giá trị độc lập như 42, true, null hoặc "hello" vẫn là JSON hợp lệ dù không phải đối tượng hay mảng. Nội dung lồng nhau quá sâu cũng có thể vượt quá giới hạn cấp lồng của bộ giải mã.

Xác thực cú pháp không thể xác nhận dữ liệu có tuân theo hợp đồng API hay không. Một tài liệu có thể là JSON hợp lệ nhưng vẫn chứa chuỗi ở vị trí ứng dụng yêu cầu số, thiếu thuộc tính bắt buộc hoặc dùng định dạng ngày không được chấp nhận. Với những yêu cầu này, hãy sử dụng JSON Schema hoặc cơ chế kiểm tra ở cấp ứng dụng.

Ví dụ thực tế về JSON

Dữ liệu đầu vào hợp lệ ở dạng thu gọn:

{"name":"Ada","active":true,"roles":["admin","editor"]}

Kết quả sau khi làm đẹp sẽ trình bày các thuộc tính và phần tử mảng trên những dòng riêng, với mức thụt lề tương ứng. Các giá trị vẫn lần lượt là chuỗi, Boolean và mảng. Việc định dạng chỉ thay đổi cách trình bày, không làm thay đổi kiểu dữ liệu bên trong.

Dữ liệu đầu vào không hợp lệ vì có dấu phẩy ở cuối:

{"name":"Ada","active":true,}

Dữ liệu này không hợp lệ vì JSON không cho phép đặt dấu phẩy sau thuộc tính cuối cùng. Hãy xóa dấu phẩy đó để đối tượng trở thành hợp lệ.

Văn bản có dấu và ký tự ngoài bảng chữ cái Latin có thể xuất hiện trực tiếp trong chuỗi JSON nếu dữ liệu đầu vào là UTF-8 hợp lệ. Ví dụ, {"city":"Zürich","greeting":"こんにちは"} là JSON hợp lệ. Ký pháp thoát JSON như \u00fc cũng là một cách biểu diễn hợp lệ đối với một số ký tự Unicode, nhưng các ký tự nằm ngoài Basic Multilingual Plane cần dùng cặp thay thế.

Khi nào không cần làm đẹp JSON?

Không cần làm đẹp JSON nếu dữ liệu chỉ dành cho máy đọc và không có kế hoạch kiểm tra thủ công hoặc xem lại bằng hệ thống quản lý phiên bản. Phần thụt lề và dấu xuống dòng bổ sung làm tăng số byte phải truyền, vì vậy phản hồi trong môi trường production thường được gửi ở dạng thu gọn.

Việc thu nhỏ JSON vốn đã ở dạng gọn cũng không mang lại nhiều lợi ích. Thu nhỏ nhiều lần không thể rút ngắn tên thuộc tính cố định hoặc giá trị chuỗi, còn nếu thay đổi các giá trị đó thì dữ liệu cũng thay đổi. Với JavaScript dùng để triển khai thay vì dữ liệu JSON, Trình thu nhỏ JS là lựa chọn phù hợp hơn.

Làm đẹp JSON hữu ích nhất khi kiểm tra cấu trúc hoặc giá trị trong quá trình gỡ lỗi, rà soát mã và kiểm tra trước khi triển khai. Cách trình bày này giúp phát hiện các cấp lồng không khớp, dễ rà soát mảng lớn hơn và tạo ra phần so sánh thay đổi rõ ràng hơn khi đưa cấu hình vào Git. Công cụ không tự động sửa JSON sai cú pháp, cũng không thể xác định ý nghĩa ban đầu của một đoạn dữ liệu mơ hồ.

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

JSON có thể chứa chú thích không?

Không. JSON tiêu chuẩn không có cú pháp chú thích, vì vậy // comment và /* comment */ đều khiến quá trình xác thực thất bại. Nếu tệp cấu hình cần có chú thích, hãy dùng định dạng hỗ trợ chúng hoặc xóa chú thích trước khi chuyển nội dung cho trình phân tích JSON nghiêm ngặt.

Tên thuộc tính bị trùng có bị từ chối không?

Không nhất thiết. Đặc tả JSON quy định rằng tên các thành viên trong một đối tượng nên là duy nhất, nhưng trình phân tích cú pháp không phải lúc nào cũng coi tên trùng là lỗi cú pháp. Khi giải mã bằng PHP, giá trị xuất hiện sau thường được giữ lại. Vì vậy, nếu cần bảo toàn mọi lần xuất hiện, hãy phát hiện tên trùng trước khi xác thực.

Có thể xác thực tệp JSON Lines không?

Không thể xác thực toàn bộ tệp như một tài liệu JSON duy nhất. JSON Lines, còn gọi là NDJSON, chứa một giá trị JSON riêng trên mỗi dòng, trong khi trình phân tích JSON thông thường chỉ chấp nhận một giá trị cấp cao nhất. Hãy xác thực từng dòng riêng biệt hoặc chuyển các bản ghi thành một mảng JSON duy nhất.

Thứ tự thuộc tính trong đối tượng JSON có quan trọng không?

Ứng dụng không nên phụ thuộc vào thứ tự thuộc tính của đối tượng JSON. Mảng có thứ tự, nhưng đối tượng là tập hợp các thành viên có tên, và trình phân tích hoặc tuần tự hóa khác có thể xuất những thành viên này theo thứ tự khác. Nếu trình tự mang ý nghĩa, hãy đặt các giá trị trong một mảng.

Tại sao tệp JSON trông đúng mà vẫn báo lỗi?

Dấu thứ tự byte không nhìn thấy, UTF-8 bị lỗi hoặc ký tự điều khiển chưa được thoát có thể khiến nội dung tưởng như chính xác vẫn không vượt qua xác thực. Khi sao chép từ cửa sổ dòng lệnh, bạn cũng có thể vô tình đưa vào các tiền tố như nhãn trạng thái hoặc dấu thời gian. Hãy kiểm tra các byte thô hoặc mở tệp bằng trình soạn thảo có thể hiển thị mã hóa và ký tự điều khiển.

Kiểm tra lần cuối

Trước khi triển khai JSON đã chỉnh sửa, hãy đối chiếu cả kiểu dữ liệu lẫn các giá trị hiển thị, kiểm tra để bảo đảm chuỗi thoát không bị thay đổi, rồi chạy ứng dụng sử dụng dữ liệu đó hoặc cơ chế xác thực schema của ứng dụng. Khi chẩn đoán dữ liệu từ bên thứ ba, hãy giữ lại một bản phản hồi gốc chưa chỉnh sửa để việc định dạng không làm che khuất nguyên nhân gây lỗi.

Công cụ phổ biến