Bản chất của chuyển đổi CSV sang JSON — một bảng phẳng thành mảng các đối tượng
Khi bạn kéo một tệp CSV vào trang csv-to-json, điều diễn ra bên dưới giao diện là một phép ánh xạ trực tiếp: mỗi hàng trong bảng CSV trở thành một đối tượng (object) trong mảng JSON, và mỗi cột trở thành một khóa (key) với giá trị là nội dung của ô tương ứng. Ví dụ, một tệp CSV ba cột Mã, Tên, Giá với hai hàng dữ liệu sẽ cho ra:
[
{
"Mã": "SP001",
"Tên": "Bút bi",
"Giá": "5000"
},
{
"Mã": "SP002",
"Tên": "Vở ô ly",
"Giá": "12000"
}
]
Cấu trúc này, thường được gọi là "table‑shaped JSON" (JSON dạng bảng), là dạng phổ biến nhất khi biểu diễn dữ liệu dạng bảng dưới dạng JSON. Mọi đối tượng đều có cùng tập khóa, tương ứng với các tiêu đề cột. Sự phẳng này bắt nguồn từ chính bản chất của CSV: CSV là một định dạng bảng hai chiều, không hỗ trợ lồng ghép cấu trúc. Trang công cụ không thêm bất kỳ quy tắc lồng ghép nào, do đó bạn sẽ không bao giờ nhận được các đối tượng chứa mảng con hoặc đối tượng con từ đầu vào CSV — trừ khi bạn tự viết kịch bản xử lý hậu kỳ.
CSV không mang thông tin kiểu dữ liệu. Mọi ô đều là văn bản thuần. Trong khi JSON hỗ trợ số (number), giá trị đúng sai (boolean), giá trị rỗng (null), và cấu trúc phức tạp, thì CSV chỉ biết đến chuỗi ký tự. Đây là nguyên nhân gốc rễ của hầu hết các nhầm lẫn khi chuyển đổi.
Tại sao mọi trường CSV đều là chuỗi — và hệ quả thực tế
Công cụ xử lý mọi giá trị từ tệp CSV dưới dạng chuỗi ký tự (string). Điều này có nghĩa: một giá trị như 5000 trong CSV sẽ vẫn là chuỗi "5000" trong JSON, chứ không phải số nguyên 5000. Một ngày tháng dạng 2024-12-31 cũng là chuỗi, không phải đối tượng Date. Một mã bưu chính 02412 sẽ giữ nguyên chữ số 0 ở đầu — chính xác như trong tệp gốc — bởi vì không có bước ép kiểu tự động nào diễn ra.
Đây vừa là ưu điểm, vừa là hạn chế. Về mặt tích cực, dữ liệu được bảo toàn nguyên vẹn như khi bạn nhìn thấy trong tệp gốc. Mã sản phẩm có số 0 ở đầu, ngày tháng không bị chuyển thành timestamp kỳ lạ, số điện thoại không mất số 0 quốc gia. Về mặt tiêu cực, nếu bạn cần xử lý các trường số hoặc ngày tháng sau khi nhận JSON (ví dụ cộng tổng giá, chuyển đổi múi giờ), bạn phải tự chuyển đổi kiểu trong môi trường đích — JavaScript, Python, hoặc bất kỳ ngôn ngữ nào bạn sử dụng.
Một lưu ý thực tế: ngay cả khi dữ liệu CSV ban đầu được xuất từ Excel với định dạng ô là "Số" hoặc "Ngày tháng", định dạng CSV không giữ lại siêu dữ liệu này. Excel xuất tệp CSV dưới dạng văn bản thuần, với số được viết dưới dạng chuỗi số (ví dụ 5000), ngày tháng được viết dưới dạng chuỗi ngày (ví dụ 2024-12-31). Công cụ không thể biết ô đó có nên là số hay ngày hay không; nó chỉ thấy một chuỗi ký tự.
Dấu phân cách và các lỗi phân tích cú pháp điển hình
Không giống như khi đọc tệp JSON (mà hầu hết trình phân tích đều linh hoạt với khoảng trắng thừa), tệp CSV yêu cầu bạn chỉ định chính xác dấu phân cách. Trang cung cấp ba lựa chọn: dấu phẩy (comma), dấu chấm phẩy (semicolon), và tab. Mỗi vùng văn hóa và mỗi ứng dụng có thói quen riêng: Excel ở Bắc Mỹ dùng dấu phẩy, Excel ở châu Âu thường dùng dấu chấm phẩy, các hệ thống cũ đôi khi dùng tab. Chọn sai dấu phân cách là lỗi phổ biến nhất — nó biến các cột dữ liệu thành một mớ hỗn độn hoặc gây ra lỗi ngay từ đầu.
Ngoài dấu phân cách, còn có vấn đề về quy tắc trích dẫn (quoting rules). CSV cho phép bao quanh một trường bằng dấu ngoặc kép nếu trường đó chứa dấu phẩy, dấu xuống dòng, hoặc chính dấu ngoặc kép. Tiêu chuẩn RFC 4180 định nghĩa quy tắc: dấu ngoặc kép trong trường được nhân đôi (""). Tuy nhiên, nhiều tệp CSV không tuân thủ đúng tiêu chuẩn. Kết quả là:
- Dấu phẩy bên trong trường không được đóng ngoặc sẽ làm hỏng phân tích cột.
- Dấu xuống dòng (line break) trong ô Excel thường được xuất dưới dạng xuống dòng thực trong tệp CSV, nhưng nếu không được bao ngoặc kép, công cụ sẽ hiểu đó là hàng mới.
- Dấu ngoặc kép không được thoát (escape) có thể khiến trình phân tích hiểu sai cấu trúc.
Khi công cụ không thể phân tích tệp do những lỗi này, nó hiển thị thông báo: This CSV could not be parsed. Nếu tệp không có hàng dữ liệu nào (chỉ có tiêu đề hoặc hoàn toàn rỗng), thông báo là: This file has no table rows.
Giới hạn kích thước và xử lý lỗi — khi nào chuyển đổi thất bại
Trang xử lý hoàn toàn phía trình duyệt, nhưng vẫn có giới hạn thực tế về dung lượng và độ phức tạp của tệp. Các giới hạn này được thông báo bằng các thông báo lỗi cụ thể:
- Số dòng vượt quá giới hạn: Nếu tệp có nhiều hơn 10.000 dòng, công cụ hiển thị: This table has more than ‹max› rows.
- Số cột vượt quá giới hạn: Tương tự cho cột: This table has more than ‹max› columns.
- Dung lượng tệp quá lớn: This file is too large. Use a file under ‹max›.
- Không chọn tệp: Choose one file first.
- Sai định dạng tệp: Trang chỉ chấp nhận CSV, JSON và XLSX. Nếu bạn tải lên tệp.txt (không phải CSV),.pdf, hoặc.png, thông báo xuất hiện: Choose a CSV, JSON or XLSX file.
- Chuyển đổi quá lâu: This conversion is taking too long. Try a smaller file. — điều này thường xảy ra với tệp CSV cực lớn hoặc có cấu trúc phức tạp.
Tất cả các thông báo đều được hiển thị trực tiếp trên trang, giúp người dùng biết chính xác vấn đề thay vì nhận một kết quả rỗng hoặc lỗi kỹ thuật khó hiểu.
Bảo mật dữ liệu nhờ xử lý hoàn toàn phía client
Khác với nhiều công cụ chuyển đổi trực tuyến tải tệp lên máy chủ, trang csv-to-json thực hiện toàn bộ quá trình xử lý trong trình duyệt của bạn. Tệp CSV không bao giờ rời khỏi máy tính của bạn. Điều này có ý nghĩa quan trọng đối với dữ liệu nhạy cảm: danh sách khách hàng, thông tin tài chính, dữ liệu nội bộ công ty — tất cả đều được xử lý cục bộ.
Cơ chế hoạt động: bạn chọn tệp. Trình duyệt đọc nội dung tệp, sau đó JavaScript xử lý toàn bộ logic phân tích và chuyển đổi. Kết quả JSON được hiển thị trong giao diện và bạn có thể tải xuống dưới dạng tệp.json. Mọi thứ diễn ra trong bộ nhớ của trình duyệt, không có kết nối mạng nào ngoài việc tải trang ban đầu.
Đối với các nhà phân tích dữ liệu làm việc với thông tin nhân khẩu học, doanh thu, hoặc bất kỳ dữ liệu nào thuộc diện bảo vệ (GDPR, HIPAA, v.v.), xử lý phía client là lợi thế rõ rệt so với các dịch vụ yêu cầu tải lên máy chủ. Bạn có toàn quyền kiểm soát dữ liệu.
So sánh với chuyển đổi ngược JSON → CSV
Nếu bạn đã từng sử dụng trang "json-to-csv" của cùng trang web, bạn sẽ thấy sự khác biệt cơ bản giữa hai hướng chuyển đổi. Khi chuyển từ JSON sang CSV, bạn phải đối mặt với vấn đề làm phẳng các cấu trúc lồng ghép (flattening) — một mảng con bên trong đối tượng sẽ phải được chuyển thành nhiều hàng với các cột lặp lại, hoặc được nối thành chuỗi. Điều này đòi hỏi các quy tắc xử lý phức tạp và thường dẫn đến mất thông tin hoặc kết quả khó đọc.
Ngược lại, CSV → JSON là một phép chuyển đổi đơn giản hơn nhiều: vì CSV đã là bảng phẳng nên không có cấu trúc nào cần làm phẳng. Mỗi hàng ánh xạ một-một vào một đối tượng, mỗi cột ánh xạ vào một khóa. Sự đơn giản này giải thích tại sao trang csv-to-json không yêu cầu tùy chọn "có làm phẳng không" hay "cột nào là khóa chính" — tất cả dữ liệu CSV đều có cấu trúc đồng nhất.
Một khác biệt nhỏ nhưng quan trọng: trong chuyển đổi CSV → JSON, bạn phải chỉ định dấu phân cách. Trong hướng ngược lại (JSON → CSV), dấu phân cách thường mặc định là dấu phẩy và bạn không cần chọn — vì đầu vào JSON đã có cấu trúc rõ ràng. Tuy nhiên, với CSV → JSON, dấu phân cách là thông tin tối quan trọng để phân tích đúng.
Câu hỏi thường gặp
1. Tôi có cần chọn định dạng đầu vào là "CSV" không? Không. Trang này chỉ chuyển đổi CSV sang JSON. Bạn chỉ cần chọn một tệp CSV.
2. Làm thế nào để giữ số 0 ở đầu khi chuyển đổi?
Không cần làm gì thêm. Mọi trường CSV đều được xử lý dưới dạng chuỗi, nên số 0 ở đầu được bảo toàn nguyên vẹn. Tuy nhiên, nếu bạn sau đó mở tệp JSON bằng Excel hoặc một công cụ tự động ép kiểu (ví dụ JavaScript JSON.parse với reviver mặc định), số 0 có thể bị mất khi được coi là số. Giải pháp: trong môi trường đích, khai báo các trường đó là chuỗi.
3. Tôi có thể chọn dấu phân cách là dấu phẩy nếu tệp thực sự dùng dấu chấm phẩy không? Có thể, nhưng kết quả sẽ sai. Công cụ sẽ phân tích tệp dựa trên dấu phẩy, dẫn đến việc mỗi hàng bị cắt nhầm vị trí cột. Hãy kiểm tra tệp gốc (mở bằng Notepad) để xác định dấu phân cách thực tế.
4. Tại sao tôi gặp lỗi "This CSV could not be parsed" dù tệp mở được trong Excel? Excel có khả năng sửa lỗi (fault-tolerant) với các tệp CSV không chuẩn — nó thường bỏ qua lỗi trích dẫn, khoảng trắng thừa, hoặc số cột không đồng nhất. Công cụ này tuân thủ chặt chẽ hơn. Hãy kiểm tra tệp gốc xem có dòng nào có số cột khác với tiêu đề, hoặc có dấu ngoặc kép không đóng đúng không.
5. Dữ liệu của tôi có an toàn không khi dùng trang này? Có. Toàn bộ quá trình chạy hoàn toàn trong trình duyệt của bạn — không tải lên máy chủ. Tệp CSV của bạn không bao giờ rời khỏi máy tính (trừ khi bạn tự tải xuống tệp JSON).
6. Làm thế nào để chuyển đổi một tệp CSV lớn hơn giới hạn? Nếu gặp thông báo This file is too large. Use a file under ‹max›. hoặc This table has more than ‹max› rows./This table has more than ‹max› columns., bạn có thể chia nhỏ tệp CSV thành nhiều phần nhỏ hơn (ví dụ dùng Excel, Python, hoặc công cụ dòng lệnh) rồi chuyển đổi từng phần. Không có cách nào vượt qua giới hạn này do công cụ phía client bị ràng buộc bởi bộ nhớ trình duyệt.