JSON Tool
Kiểm tra, format và khám phá JSON ngay trong trình duyệt. Dán hoặc tải JSON lên để phát hiện lỗi cú pháp tức thì, rồi xem dưới dạng code tô màu cú pháp, cây (tree) tương tác, bảng (table) hoặc dạng nén (compact) một dòng. Mọi xử lý diễn ra cục bộ trong trình duyệt nên dữ liệu của bạn không rời khỏi thiết bị.
Các bước sử dụng
- Nhập JSON: nhấn Dán để dán từ clipboard, dùng Tải lên để tải file
.jsonhoặc.txt, hoặc gõ trực tiếp vào ô JSON đầu vào (có số dòng và tô màu cú pháp trực tiếp). - Theo dõi thẻ trạng thái cạnh thanh công cụ: thẻ xanh Hợp lệ nghĩa là JSON hợp lệ, còn thẻ đỏ Lỗi - Dòng chỉ đến lỗi đầu tiên. Thanh báo lỗi và số dòng được tô sáng cho biết chính xác dòng, cột và nội dung lỗi.
- Làm gọn bằng Định dạng (in đẹp với thụt lề 2 dấu cách) hoặc Rút gọn (nén về một dòng). Cả hai chỉ hoạt động khi JSON đã hợp lệ.
- Đổi cách hiển thị kết quả bằng thanh chọn: Code (dòng tô màu, có số dòng), Viewer (cây có thể mở rộng, hiện số phần tử và nút copy từng nhánh), Table (hàng và cột cho mảng các object), Rút gọn (văn bản đã nén), Truy vấn (chạy biểu thức trên dữ liệu) hoặc So sánh (đối chiếu với một tài liệu thứ hai).
- Ở chế độ Viewer, dùng nút mở/thu gọn tất cả hoặc bấm vào từng nút để đi sâu vào, và di chuột lên một giá trị để copy riêng nhánh đó.
- Xuất kết quả bằng Sao chép để đưa văn bản thô vào clipboard, hoặc Tải xuống để lưu thành file
data.json.
Truy vấn — lấy dữ liệu bằng biểu thức
Chuyển tab hiển thị sang Truy vấn, gõ biểu thức rồi nhấn Chạy (hoặc phím Enter). Truy vấn dùng JSONata — một ngôn ngữ truy vấn dành riêng cho JSON — và chạy hoàn toàn trong trình duyệt của bạn.
Một ô truy vấn trống thì vô dụng với người chưa từng biết cú pháp, nên ngay bên dưới ô nhập có một hàng thẻ ví dụ: bấm vào một thẻ để nạp biểu thức rồi sửa lại theo ý bạn. $ là toàn bộ tài liệu, $keys($) liệt kê tên các khoá cấp ngoài cùng, **.name gom mọi giá trị name ở mọi cấp, còn $sum(**.price) cộng tất cả price tìm được.
Kết quả hiển thị dạng JSON đã format. Sao chép đưa kết quả vào clipboard, còn Dùng làm đầu vào thay nội dung ô soạn thảo bằng kết quả để bạn nối tiếp một truy vấn nữa. Biểu thức không khớp dữ liệu nào sẽ được báo rõ chứ không hiện kết quả rỗng, còn lỗi cú pháp hay lỗi khi tính toán sẽ hiện kèm thông báo gốc của JSONata.
So sánh hai file JSON
Chuyển tab hiển thị sang So sánh rồi dán tài liệu thứ hai vào ô JSON B. Bạn nhận được phép so sánh theo cấu trúc chứ không phải so sánh văn bản từng dòng:
+thêm mới — khoá hoặc phần tử mảng chỉ có ở B.-bị xoá — chỉ có ở A.~thay đổi — cùng đường dẫn nhưng khác giá trị (hoặc khác kiểu dữ liệu).⇅đổi vị trí — vẫn là phần tử đó nhưng nằm ở chỉ số khác. Cột B cho biết nó chuyển tới đâu.
Mỗi dòng hiện đúng đường dẫn ($.user.roles[2]) kèm giá trị ở cả hai bên, nên việc đảo thứ tự khoá hay thụt lề khác nhau không bao giờ bị báo nhầm là khác biệt.
Phép so sánh dựa trên ngữ nghĩa chứ không dựa trên văn bản. Thứ tự khoá bị bỏ qua ở mọi cấp, và các phần tử mảng được ghép theo giá trị trước khi ghép theo vị trí: so một mảng với chính nó đã bị xáo trộn chỉ cho ra vài dòng "đổi vị trí" thay vì báo mọi ô đều thay đổi. Những phần tử còn dư ở cả hai bên sẽ được ghép cặp và so từng trường, nên một thuộc tính bị sửa bên trong phần tử danh sách được báo đúng tại đường dẫn của nó ($.items[3].price) chứ không bị coi là xoá đi rồi thêm lại.
Mẹo
- Bấm nút bánh răng (Màu sắc) để tùy chỉnh màu cú pháp cho key, string, number, boolean, null và dấu ngoặc; nhấn Reset để trở về mặc định.
- Chế độ Table phù hợp nhất với mảng các object — nó tạo một cột cho mỗi key trên tất cả phần tử và phân trang 50 hàng mỗi lần. Với object đơn, bảng hiển thị theo Key / Type / Value.
- Nhấn Tab trong ô nhập để chèn hai dấu cách mà không mất con trỏ, giúp bạn tự chỉnh thụt lề.
- Chú ý phần thống kê trên thanh công cụ (dung lượng, số dòng, số object/array/key và độ sâu) để ước lượng JSON lớn hay lồng sâu tới đâu.
- Ở chế độ Truy vấn, bạn có thể nhấn Enter ngay trong ô biểu thức thay vì rê chuột tới nút Chạy.
- Dùng Sắp xếp khoá trước khi So sánh nếu muốn hai tài liệu nhìn giống nhau khi đặt cạnh nhau — bản thân phép so sánh vốn đã bỏ qua thứ tự khoá, nên việc này chỉ để dễ nhìn.
Câu hỏi thường gặp
JSON của tôi có được tải lên máy chủ không?
Không. Việc kiểm tra, format và mọi chế độ xem đều chạy hoàn toàn phía trình duyệt, nên không có gì được gửi đi đâu cả.
Vì sao Định dạng và Rút gọn bị vô hiệu hoặc báo lỗi?
Chúng chỉ chạy với JSON hợp lệ. Nếu thấy "Sửa lỗi trước", hãy xem thẻ lỗi đỏ và dòng được tô sáng, sửa cú pháp rồi thử lại.
Vì sao kết quả so sánh báo "đổi vị trí" chứ không phải "thay đổi"?
Vì bản thân phần tử đó không đổi, chỉ có vị trí trong mảng là khác. Công cụ ghép các phần tử mảng theo giá trị trước, nên một danh sách bị đảo thứ tự sẽ cho ra các dòng đổi vị trí. Nếu phần tử vừa bị chuyển chỗ vừa bị sửa, bạn sẽ thấy cả hai: một dòng đổi vị trí và một dòng thay đổi tại đúng đường dẫn của trường bị sửa.
Truy vấn của tôi không trả về gì. Vậy có phải lỗi không?
Không. JSONata không trả về giá trị nào khi biểu thức không khớp dữ liệu, và trường hợp đó được báo là "không khớp" chứ không phải lỗi. Sai sót thật sự — gõ nhầm biểu thức, hoặc phép tính không áp dụng được cho dữ liệu của bạn — sẽ hiện thành thông báo lỗi màu đỏ kèm nội dung gốc từ JSONata.
Đây là ngôn ngữ truy vấn nào? Tôi dùng JSONPath được không?
Đây là JSONata, không phải JSONPath. Với đường dẫn đơn giản thì hai bên khá giống nhau (a.b.c chạy được ở cả hai) nhưng khác hẳn khi bắt đầu lọc hoặc tổng hợp. JSONata là một ngôn ngữ biểu thức đầy đủ nên còn làm được phép tính, sắp xếp, ánh xạ và các hàm như $sum, $count, $keys, $sort.
Table báo cần object — vì sao bảng trống?
Table được thiết kế cho object và mảng các object. Một chuỗi, số, hay mảng các giá trị nguyên thủy ở cấp cao nhất thì không có cột để hiển thị, nên hãy dùng chế độ Code hoặc Viewer cho những trường hợp đó.