Bộ chuyển đổi CSV sang JSON
Dán CSV (hoặc TSV) bên trái, nhận mảng JSON các đối tượng bên phải. Tự động nhận diện tiêu đề. Không cần tải lên.
- Dán CSV của bạn vào ô văn bản bên trái.
- Nhấn "Chuyển sang JSON". Hàng đầu tiên được coi là tiêu đề.
- Sao chép mảng JSON, hoặc tải xuống dưới dạng data.json.
- TSV (phân tách bằng tab) và các dấu phân cách khác được PapaParse tự động nhận diện.
Công cụ này làm gì?
Phân tích CSV (gần với RFC 4180) thành mảng JSON, trong đó mỗi khóa đối tượng khớp với một cột tiêu đề. Các trường có dấu nháy, dấu phẩy bên trong, dấu nháy kép thoát, và xuống dòng CRLF / LF đều được xử lý. Số, boolean và giá trị giống null ("true", "false", trống) được tự động gán kiểu. Dấu phân cách được tự động phát hiện — bạn có thể dán TSV, dữ liệu phân tách bằng chấm phẩy hoặc gạch đứng, vẫn hoạt động.
Ví dụ
Đầu vào CSV:
name,age,role
Ada,36,engineer
Grace,40,scientist Đầu ra JSON:
[
{"name": "Ada", "age": 36, "role": "engineer"},
{"name": "Grace", "age": 40, "role": "scientist"}
] Bẫy CSV thường gặp và cách xử lý
CSV trông đơn giản nhưng có nhiều trường hợp biên hơn người ta nghĩ. Đây là những mẫu cho ra kết quả bất ngờ.
- Dấu phẩy bên trong không có dấu nháy. Trường như `Smith, John` (không có dấu nháy bao quanh) sẽ bị tách thành hai cột. Hãy bọc bằng dấu nháy kép: `"Smith, John"`.
- Dấu nháy kép bên trong trường. Bên trong trường có dấu nháy, một `"` chữ được thoát bằng cách nhân đôi: `"He said ""hi"""` được giải mã thành `He said "hi"`. Thoát bằng dấu gạch chéo ngược (`\"`) không phải chuẩn và không được hỗ trợ.
- Số cột không nhất quán. Hàng có ít cột hơn tiêu đề sẽ nhận null cho các khóa thiếu; hàng có nhiều cột hơn được báo dưới dạng cảnh báo phân tích. Việc chuyển đổi vẫn hoàn tất nhưng hãy kiểm tra đầu ra.
- ID dạng số mất các số 0 đứng đầu. `007` được phân tích thành số 7, không phải chuỗi "007". Nếu các số 0 đầu là quan trọng (mã bưu chính, số điện thoại), hãy bọc trường bằng dấu nháy để tiền xử lý — giá trị có dấu nháy có thể được giữ là chuỗi nếu bạn tắt tự động gán kiểu trong mã hạ nguồn.
- BOM ở đầu file. CSV được Excel lưu thường có dấu thứ tự byte UTF-8 (`\uFEFF`) ở đầu. Bộ phân tích sẽ tự gỡ, nhưng nếu bạn dán byte thô từ trình chỉnh sửa hex, có thể thấy BOM như một ký tự lạ ở tiêu đề đầu tiên.
- Xuống dòng hỗn hợp. CRLF (Windows), LF (Unix), và CR (Mac cũ) đều được nhận diện. Nếu kết quả trông như một hàng khổng lồ, file có thể không có dấu xuống dòng nào — thường gặp khi CSV được tạo bằng cách nối chuỗi mà không có `\n`.
Câu hỏi thường gặp
Có hỗ trợ giá trị phân tách bằng tab (TSV) không?
Có. PapaParse tự động phát hiện dấu phân cách từ kilobyte đầu tiên. Tab, chấm phẩy, gạch đứng và dấu phẩy đều hoạt động không cần cấu hình. Nếu phát hiện sai (hiếm trên dữ liệu thực), hãy tách trường rõ hơn hoặc tiền xử lý.
Nếu CSV của tôi không có dòng tiêu đề thì sao?
Cấu hình hiện tại giả định dòng đầu là tiêu đề. Nếu CSV không có tiêu đề, hãy thêm một dòng tiêu đề tổng hợp như `a,b,c` trước khi dán — hoặc dùng `header: false` với PapaParse trên dòng lệnh nếu cần đầu ra dạng mảng-của-mảng.
Ngày tháng được xử lý thế nào?
Vẫn là chuỗi. Bộ phân tích chỉ tự gán kiểu cho số và boolean — phân tích ngày được cố tình bỏ qua vì sự nhập nhằng định dạng (`01/02/03` là 2 tháng 1 ở Mỹ, 1 tháng 2 ở Anh) quá rủi ro để đoán. Hãy phân tích ở phía hạ nguồn nơi bạn biết quy ước nguồn.
Có thể chuyển đổi file CSV rất lớn không?
Lên đến khoảng 50 MB trước khi trình duyệt bắt đầu chậm. Cổ chai là ô văn bản, không phải bộ phân tích — với file lớn hơn, hãy chạy PapaParse trên dòng lệnh. Thư viện vẫn vậy.
CSV của tôi có bị tải lên không?
Không. Mọi thứ chạy trong trình duyệt — dữ liệu được phân tích bằng JavaScript trên trang này và không bao giờ gửi đến máy chủ nào. Bạn có thể kiểm tra ở DevTools: không có yêu cầu mạng nào khi nhấn Chuyển đổi.
Làm sao để có JSON với hình dáng khác (lồng nhau, nhóm)?
Công cụ này tạo mảng phẳng các đối tượng phẳng — đó là điều CSV thể hiện. Để có cấu trúc lồng nhau, hậu xử lý đầu ra bằng script (nhóm theo cột, đổi tên trường bằng tiền tố, v.v.). Cố gắng mã hóa phân cấp trong CSV thường gây nhiều rắc rối hơn lợi ích.