Công cụ này làm gì
Dán JSON vào, thả một file, hoặc gõ trực tiếp, rồi định dạng, kiểm tra hoặc nén nó — hoàn toàn ngay trong trình duyệt của bạn. Một module WebAssembly được dựng từ Rust đảm nhận việc parse và viết lại ngay bên trong tab trình duyệt, nên JSON của bạn không bao giờ được tải lên server: không có gì trong nội dung đó rời khỏi thiết bị của bạn ở bất kỳ thời điểm nào.
Cách sử dụng
Dán JSON của bạn vào ô nhập liệu, hoặc nạp từ một file. Chọn độ rộng thụt lề (2 dấu cách, 4 dấu cách, hoặc tab), hoặc bật Nén (minify) để gom mọi thứ về một dòng duy nhất. Bật Sắp xếp khóa nếu bạn muốn khóa của mọi object được sắp theo thứ tự bảng chữ cái. Nhấp Định dạng, rồi xem kết quả: nếu parse thành công, bạn sẽ thấy JSON đã định dạng cùng mọi cảnh báo kèm theo; nếu JSON không hợp lệ, công cụ chỉ rõ dòng và cột nơi việc parse bị lỗi. Sao chép kết quả hoặc tải về khi bạn đã hài lòng.
Vì sao số lớn không bị sai ở đây
Thử mở một số nguyên rất lớn như 12345678901234567890 bằng một công cụ JSON chạy trên trình duyệt thông thường, rồi xem kết quả trả về: 12345678901234568000. Vài chữ số cuối đã biến mất, thay bằng số 0, dù giao diện công cụ chẳng hề cảnh báo gì. Điều đó xảy ra vì phần lớn công cụ JSON parse bằng JavaScript, mà JavaScript lưu mọi con số — bất kể nó được viết ra sao — dưới dạng số thực dấu phẩy động 64-bit. Một số thực dạng này chỉ giữ được an toàn khoảng mười bảy chữ số có nghĩa, nên bất cứ số nào dài hơn sẽ bị âm thầm làm tròn về giá trị gần nhất mà kiểu số đó biểu diễn được, và khi ghi lại giá trị đã làm tròn đó, kết quả sẽ khác với con số bạn gõ vào ban đầu.
Công cụ định dạng này tránh hoàn toàn vấn đề đó bằng cách parse với thư viện serde_json của Rust ở chế độ giữ độ chính xác tuyệt đối, giữ nguyên phần chữ số gốc của từng con số thay vì chuyển nó sang số thực trước. Một số nguyên khổng lồ như ví dụ trên, hay một số thập phân dài hai mươi chữ số có nghĩa, khi ra khỏi công cụ này vẫn y hệt lúc vào — đúng từng byte, từng chữ số. Điều duy nhất công cụ này không kiểm soát được là ở bước sau: nếu bạn dán kết quả đã định dạng vào một công cụ khác cũng dùng số của JavaScript, công cụ đó vẫn sẽ làm tròn nó. Điều được đảm bảo ở đây chỉ là bản thân công cụ định dạng này không bao giờ gây ra sự sai lệch đó.
Khóa trùng: Giá trị cuối thắng, kèm cảnh báo
Về mặt cú pháp, JSON cho phép cùng một khóa xuất hiện nhiều hơn một lần trong cùng một object, dù phần lớn mọi người không cố tình viết JSON như vậy. Khi điều đó xảy ra, mọi trình phân tích JSON — kể cả JSON.parse có sẵn của trình duyệt — đều xử lý theo cùng một cách: giá trị được ghi sau cùng cho khóa đó sẽ thắng, còn mọi giá trị trước đó cho cùng khóa bị âm thầm loại bỏ. Công cụ này xử lý đúng theo quy tắc đó, nên kết quả của nó luôn khớp với bất kỳ trình phân tích JSON chuẩn nào khác.
Điều công cụ này bổ sung thêm là sự minh bạch. Trước khi định dạng, đầu vào được quét riêng để tìm khóa lặp lại, và nếu có, một cảnh báo sẽ nêu rõ tên khóa cùng đường dẫn chính xác tới object chứa nó — để bạn biết ngay có một giá trị đã bị loại bỏ, thay vì chỉ nhận ra sau này khi một trường mang giá trị không như bạn mong đợi.
Các tùy chọn định dạng
- Thụt lề — chọn 2 dấu cách, 4 dấu cách, hoặc tab cho phần định dạng đẹp.
- Nén (minify) — gom toàn bộ tài liệu về một dòng duy nhất, không còn khoảng trắng thừa, cho kết quả nhỏ nhất có thể.
- Sắp xếp khóa — sắp lại khóa của mọi object theo thứ tự bảng chữ cái, đệ quy qua toàn bộ tài liệu, bất kể thứ tự ban đầu trong JSON của bạn.
Minify và Sắp xếp khóa hoạt động độc lập với nhau: chỉ bật Minify không bao giờ làm thay đổi thứ tự khóa, nó chỉ loại bỏ khoảng trắng. Khóa của bạn vẫn giữ đúng thứ tự đã viết trừ khi Sắp xếp khóa cũng được bật.
Giới hạn
Dữ liệu đầu vào bị giới hạn ở mức 10 MB. Một file hoặc đoạn dán vượt quá dung lượng đó bị từ chối ngay lập tức kèm thông báo rõ ràng, trước khi bất kỳ bước parse nào được thử, để bạn không phải chờ một tab trình duyệt âm thầm hết bộ nhớ.
Bước tiếp theo
Nếu bạn cần lấy ra những trường cụ thể trong một tài liệu JSON, biến đổi một mảng object, hoặc lọc bản ghi theo một điều kiện thay vì chỉ định dạng lại, công cụ jq chạy các filter kiểu jq thật trên JSON của bạn theo cùng cách hoàn toàn trong trình duyệt — nhưng cũng nên biết rằng cách jq xử lý số không giữ chính xác từng byte như công cụ định dạng này, nên với việc định dạng lại mà không muốn rủi ro với số lớn, trang này vẫn là lựa chọn phù hợp hơn.