Câu hỏi thường gặp về cách dùng công cụ: dữ liệu, tệp và xuất
Kết luận: Dữ liệu có bị tải lên không, tệp lớn đến mức nào thì dùng được, có gì được lưu cục bộ, tại sao tiếng Trung biến thành escape: mười câu hỏi nói rõ ranh giới thực sự của một công cụ JSON trực tuyến.

Tóm lại: phân tích, định dạng, so sánh và truy vấn chạy hoàn toàn trong trình duyệt của bạn và vẫn hoạt động khi ngoại tuyến; hãy xóa lịch sử localStorage sau khi xử lý dữ liệu nhạy cảm; và với tệp trên 10 MB, hãy chuyển sang công cụ dạng luồng trên dòng lệnh thay vì dán tệp vào trình duyệt.
Trước khi dán một payload nhạy cảm vào công cụ trực tuyến, hãy biết nó đi đâu. Bài này chỉ nói về hành vi lúc chạy của công cụ, không bàn về cú pháp.
1. Dữ liệu và quyền riêng tư
Công cụ định dạng JSON trực tuyến có tải dữ liệu của tôi lên máy chủ không?
Không. Phân tích, định dạng, nén, so sánh và truy vấn đều diễn ra trong trình duyệt, và trang không bao giờ gửi bất cứ thứ gì bạn dán lên máy chủ ứng dụng.
Bạn không cần đọc tuyên bố quyền riêng tư để biết một công cụ trực tuyến có tải dữ liệu lên hay không; bảng network của trình duyệt là đủ:
- Mở công cụ cho nhà phát triển, chuyển sang bảng Network và bật lưu giữ log;
- Dán một đoạn JSON và bấm "Định dạng";
- Xem có yêu cầu XHR hoặc fetch mới xuất hiện không, và phần thân của nó có chứa nội dung của bạn không.
Với một công cụ thực sự cục bộ, bước này chỉ hiện các yêu cầu tải tài nguyên tĩnh. Ngược lại, nếu chỉ một thao tác định dạng mà sinh ra POST /api/format
với phần thân là văn bản gốc của bạn, thì dữ liệu đã rời khỏi trình duyệt bất kể trang nói gì.
Mọi công cụ trên trang này đều là triển khai thuần front-end, và bản dựng không chứa API máy chủ. Sau khi ngắt mạng, việc tải lại trang từ bộ nhớ đệm vẫn hoạt động, và đó cũng là cách trực tiếp nhất để biết một thứ có "hoàn toàn cục bộ" hay không.
Tôi có thể dùng khi ngoại tuyến không?
Có, miễn là trang đã được tải một lần.
Tài nguyên của trang được tải vào bộ nhớ đệm trình duyệt trong lần truy cập đầu tiên, nên ngay cả khi sau đó không có mạng, việc định dạng, nén, chuyển đổi JSON5 và truy vấn JSONPath vẫn hoạt động. Chỉ những tính năng phụ thuộc mạng mới thất bại, như kiểm tra phiên bản mới hoặc tải bộ cài desktop.
Phép thử ngoại tuyến cũng là cách tốt để xác nhận "dữ liệu không bao giờ rời đi": nếu mọi thứ hỏng ngay khi bạn ngắt kết nối, thì mọi thao tác đều đang nói chuyện với máy chủ.
Có dữ liệu nào được lưu cục bộ không? Xóa bằng cách nào?
Có, nhưng chỉ trong localStorage của trình duyệt hiện tại, và chỉ lịch sử cùng cài đặt giao diện.
- Lịch sử: 100 mục đã xử lý gần nhất theo thứ tự thời gian ngược, dùng để gợi lại dữ liệu đã dán trước đó;
- Cài đặt giao diện: giao diện, ngôn ngữ, tùy chọn thụt lề, v.v.;
- Không lưu: bản thân tệp, bản ghi tải lên, hay bất cứ thứ gì mang danh tính.
Có ba cách xóa, từ hẹp nhất đến rộng nhất:
| Cách | Phạm vi | Khi nào dùng |
|---|---|---|
| "Xóa lịch sử" trên trang lịch sử | Chỉ xóa lịch sử, giữ cài đặt | Sau khi xử lý dữ liệu nhạy cảm |
Chạy localStorage.clear() trong công cụ cho nhà phát triển |
Toàn bộ dữ liệu cục bộ của trang này | Khi chẩn đoán cài đặt bất thường |
| "Xóa dữ liệu duyệt web" của trình duyệt cho trang này | Cookie, bộ nhớ đệm và lưu trữ cùng lúc | Trước khi dùng máy tính dùng chung |
Khi xử lý dữ liệu production trên một máy tính dùng chung, hãy xóa lịch sử sau khi xong thay vì chỉ đóng tab — localStorage không biến mất khi tab đóng lại.
Tại sao ký tự tiếng Trung biến thành \u4e2d\u6587?
Vì tính năng "escape" chuyển các ký tự không thuộc ASCII thành chuỗi escape Unicode. Đây là hành vi có chủ đích, không phải mojibake.
\u4e2d là mã điểm của ký tự 中 (U+4E2D). Hai dạng này tương đương về ngữ nghĩa trong JSON và phân tích thành cùng một chuỗi:
{
"escaped": "\u4e2d\u6587",
"plain": "中文"
}
Khi nào cần escape? Khi nhúng JSON vào một hệ thống cũ chỉ chấp nhận ASCII, khi ghi nó vào HTTP header, hoặc khi lồng nó trong một chuỗi khác. Khi nào không cần? Phần lớn việc truyền tải API và lưu trữ tệp không cần; lưu tiếng Trung trực tiếp dưới dạng UTF-8 tiết kiệm byte — một ký tự tiếng Trung là 3 byte, và 6 byte khi đã escape.
Nếu bạn thấy tiếng Trung biến thành \u4e2d, trước hết hãy kiểm tra xem bạn có bấm nút "Escape" không, thay vì nghi ngờ rằng encoding bị hỏng.
2. Tệp và kích thước
Kích thước tệp được hỗ trợ là bao nhiêu?
Không có giới hạn cứng ở phía trình duyệt; giới hạn thực đến từ ba nơi:
| Giai đoạn | Nút cổ chai ước lượng | Triệu chứng |
|---|---|---|
| Dán vào ô văn bản | 1–5 MB | Ô nhập bị trễ sau khi dán, con trỏ phản hồi chậm |
JSON.parse |
50–100 MB | Luồng chính chặn vài giây, trang không phản hồi |
| Kết xuất cây | 10k–20k nút | Rớt khung hình khi mở rộng, cuộn bị đóng băng |
Nói cách khác, một tệp vài chục MB "có thể phân tích" nhưng "không dùng được". Khi bạn thực sự cần xử lý dữ liệu như vậy, cách đúng không phải là tìm một công cụ trực tuyến mạnh hơn, mà là chuyển sang dạng luồng (xem Câu hỏi thường gặp về hiệu năng và bảo mật).
Quy tắc kinh nghiệm: dưới 2 MB thì công cụ trực tuyến vẫn mượt; 2–10 MB là chấp nhận một hai lần trễ; trên 10 MB thì nên dùng script cục bộ.
Trình duyệt bị đóng băng sau khi tôi dán. Giờ phải làm sao?
Đừng tải lại trước — tải lại sẽ mất nội dung và bạn phải dán lại. Hãy cứu theo thứ tự này:
- Đợi 10–30 giây. Trong hầu hết trường hợp, luồng chính đang phân tích hoặc kết xuất và sẽ tự phục hồi;
- Khi nó phục hồi, ngay lập tức chuyển sang chế độ xem "Nén" hoặc thu gọn cây để giảm số nút DOM;
- Sao chép nội dung vào một tệp cục bộ và chuyển sang dòng lệnh:
# Look at the structure of the first 100 lines only, to avoid loading everything
head -c 200000 data.json | jq . | head -n 100
# Count entries with a streaming tool, without loading them into memory
jq -c '.items[]' data.json | wc -l
Lần sau khi gặp tệp lớn, hãy chạy wc -c trước để xem số byte, rồi mới quyết định có dán vào trình duyệt không.
Tại sao sau khi dán, định dạng không thay đổi?
Ba nguyên nhân phổ biến, xếp theo tần suất:
- Đầu vào vốn đã được nén và không có lỗi cú pháp: định dạng chỉ điều chỉnh thụt lề, nên nếu bản gốc thực sự chỉ có hai dòng, thì sau đó vẫn là hai dòng — xuống dòng bên trong chuỗi không được mở rộng;
- Nội dung không phải JSON: ví dụ bạn dán một object literal của JavaScript (khóa không có nháy, nháy đơn), và trình phân tích báo lỗi thay vì định dạng;
- Bạn bấm nhầm nút: nén và định dạng đi theo hai hướng ngược nhau, và nén sẽ bỏ toàn bộ thụt lề.
Cách phân biệt: xem số ký tự ở góc trên bên phải vùng kết quả. Sau khi định dạng, số ký tự phải tăng (thêm thụt lề và xuống dòng); nếu nó giảm đi thì bạn đã chạy nén.
3. Đầu vào và đầu ra
Làm sao xuất kết quả ra tệp?
Ba cách, xếp theo độ tin cậy:
| Cách | Thao tác | Khi nào dùng |
|---|---|---|
| Nút tải xuống | Bấm "Tải xuống" để tạo tệp .json |
Kết quả lớn cần lưu trữ |
| Sao chép vào clipboard | Bấm "Sao chép" | Kết quả nhỏ để dán thẳng lại vào mã |
| Chọn tất cả và sao chép thủ công | Chọn vùng kết quả và nhấn Ctrl/Cmd + C |
Phương án dự phòng khi nút sao chép lỗi |
Tệp tải xuống được mã hóa UTF-8 không có BOM theo mặc định. Điều này quan trọng: JSON có BOM hỏng ngay trong nhiều trình phân tích (xem phần về BOM trong Câu hỏi thường gặp về cú pháp và định dạng).
Có hỗ trợ JSON5 và JSONC không?
Có, nhưng hãy phân biệt "phân tích" với "kết xuất".
- Ở phía đầu vào, bạn có thể dán JSON5 (nháy đơn, khóa không có nháy, chú thích, dấu phẩy cuối, số thập lục phân) hoặc JSONC (chỉ chú thích);
- Ở phía đầu ra, bạn có thể chuyển sang JSON chuẩn, hoặc chuyển JSON chuẩn ngược lại thành JSON5 để chỉnh tay dễ hơn.
Luôn xuất JSON chuẩn khi đi qua ranh giới hệ thống. JSON5 là dialect cho người viết cấu hình; một phần thân yêu cầu với
Content-Type: application/json mà chứa chú thích hoặc dấu phẩy cuối thường sẽ bị máy chủ từ chối.
4. Môi trường và khả năng tương thích
Có dùng được trên điện thoại không?
Có. Giao diện tự động chuyển thành một cột, và định dạng, nén, so sánh và JSONPath đều được giữ lại.
Nhưng xử lý tệp lớn trên điện thoại là trải nghiệm kém: bàn phím ảo che nội dung, chọn văn bản khó, và trình duyệt có thể loại bỏ trang khi bạn chuyển ứng dụng, làm mất nội dung. Chấp nhận được khi khẩn cấp, nhưng hằng ngày nên làm trên máy tính để bàn.
Tại sao cùng một tệp mở được trong Chrome nhưng lại lỗi trong Safari?
Thường đó không phải là khác biệt trình duyệt mà là khác biệt encoding. Hãy gỡ theo thứ tự này:
- BOM: UTF-8 do Notepad trên Windows lưu có kèm BOM, và một số trình phân tích không chấp nhận điều đó;
- Ký tự xuống dòng: trộn CRLF và LF không ảnh hưởng đến bản thân JSON, nhưng nó làm lệch số dòng báo lỗi, nên trông như "vị trí lỗi bị sai";
- Ký tự vô hình: văn bản sao chép từ trang web có thể chứa dấu cách độ rộng bằng không (U+200B), mắt không thấy nhưng đủ để làm hỏng việc khớp khóa.
Một lệnh là đủ để nhìn ra:
# Look at the hex of the first 16 bytes; a leading EF BB BF means a BOM is present
head -c 16 data.json | xxd
5. Bảng tra nhanh
| Câu hỏi | Kết luận |
|---|---|
| Có tải dữ liệu lên không | Không, mọi thứ được xử lý cục bộ trong trình duyệt, và hoạt động cả khi ngoại tuyến |
| Dữ liệu lưu ở đâu | localStorage, chỉ lịch sử và cài đặt, không bao giờ lưu tệp |
| Kích thước tệp hợp lý | Mượt dưới 2 MB; trên 10 MB hãy chuyển sang dòng lệnh |
Tiếng Trung biến thành \u |
Bạn đã bấm escape; tương đương nhưng cồng kềnh hơn, thường không cần thiết |
| Nó bị đóng băng, giờ sao | Đợi phục hồi → thu gọn cây → sao chép ra và dùng jq |
| Tệp xuất có BOM không | Không, UTF-8 không có BOM |
| Có hỗ trợ chú thích không | JSON5/JSONC ở phía đầu vào; hãy xuất JSON chuẩn |