Chuyển đổi CSV sang JSON và JSON sang CSV

Chuyển CSV sang JSON và ngược lại: dấu nháy, mọi dấu phân cách, dữ liệu lồng nhau.

Mặc định tắt: mọi giá trị giữ nguyên là chữ, nên những số như 007 không bị đổi.

Công cụ này làm gì

Công cụ biến một bảng dạng CSV thành JSON, và JSON trở lại thành bảng, mà không gửi dữ liệu đi đâu. CSV chỉ là văn bản có mỗi dòng một bản ghi và một dấu phân cách giữa các giá trị; dễ tạo ra nhưng đọc cho đúng lại khó bất ngờ: giá trị có thể chứa chính dấu phân cách, dấu nháy, thậm chí cả xuống dòng. Trình chuyển đổi này tuân theo đặc tả CSV (RFC 4180) và khoan dung với các tệp lộn xộn mà bảng tính và hệ thống xuất ra trong thực tế.

Chuyển CSV sang JSON

  1. Dán CSV, hoặc mở hay thả một tệp.
  2. Để "Dấu phân cách" ở chế độ tự động. Công cụ xem vài hàng đầu và chọn dấu phẩy, chấm phẩy, tab hoặc gạch đứng sao cho mọi hàng ra cùng số cột. Excel ở nhiều thiết lập khu vực, trong đó có Việt Nam, lưu bằng dấu chấm phẩy, nên việc đoán đúng rất quan trọng.
  3. Giữ "Hàng đầu là tiêu đề" để có mảng các đối tượng theo tên cột, hoặc bỏ chọn, hay chọn "Mảng các mảng", để có danh sách giá trị thuần.
  4. Quyết định có chuyển kiểu không. Mặc định mọi giá trị giữ nguyên là chữ như đã viết. Bật "Chuyển số, true/false và ô trống" thì 42 thành số, true thành boolean, ô trống thành null. Số giữ đúng dạng chữ nên 1.50 vẫn là 1.50.
  5. Sao chép hoặc tải JSON.

Chuyển JSON sang CSV

Dán một mảng các đối tượng, một mảng các mảng hoặc một đối tượng. Các cột là mọi khóa xuất hiện ở bất kỳ bản ghi nào, theo thứ tự xuất hiện đầu tiên; bản ghi thiếu khóa sẽ có ô trống. Dữ liệu lồng nhau được làm phẳng theo một quy tắc rõ ràng: khóa trong đối tượng thành đường dẫn nối bằng dấu chấm, nên {"user": {"name": "An"}} cho cột user.name, và các phần tử mảng được đánh số, nên tags thành tags.0 và tags.1. Nếu muốn, bạn có thể giữ nguyên cả mảng dưới dạng JSON trong một ô. Ô chứa dấu phân cách, dấu nháy hoặc xuống dòng được đặt trong dấu nháy, dấu nháy được nhân đôi, đúng chuẩn.

Ví dụ

CSV này có một giá trị trong dấu nháy chứa dấu phẩy và một ô trống:

name,age,city
An,34,"Ha Noi, VN"
Binh,,Hue

Với thiết lập mặc định, kết quả là danh sách hai đối tượng trong đó mọi giá trị là chữ, nên tuổi của Binh là chuỗi rỗng. Khi bật chuyển kiểu, tuổi của An thành số 34 và của Binh thành null. Theo chiều ngược lại, JSON {"id": 1, "user": {"name": "An"}, "tags": ["a", "b"]} thành các cột id, user.name, tags.0 và tags.1 với giá trị 1, An, a và b.

Vì sao mặc định không chuyển kiểu

Bảng tính âm thầm biến chữ thành số và làm hỏng dữ liệu: mã bưu chính 01234 mất số 0, số thẻ hay mã đơn hàng 16 chữ số thành ký hiệu khoa học, mã sản phẩm như 1E5 thành 100000. Công cụ này không đoán trừ khi bạn yêu cầu. Kể cả khi bật chuyển kiểu, giá trị có số 0 đứng đầu, hoặc số nguyên hơn 15 chữ số, vẫn giữ là chữ vì JavaScript không biểu diễn chính xác được.

Lỗi thường gặp

  • Sai dấu phân cách. Mọi thứ dồn vào một cột. Hãy để chế độ tự động hoặc chọn dấu phân cách thủ công.
  • Tiếng Việt bị lỗi trong Excel. Excel cần BOM để nhận ra UTF-8. Hãy bật "Thêm dấu BOM" khi chuyển sang CSV cho Excel.
  • Ô bắt đầu bằng = + - hoặc @. Excel coi đó là công thức khi mở tệp. Hãy kiểm tra dữ liệu từ nguồn không tin cậy trước khi mở trong bảng tính.
  • Dấu nháy không cân. Một dấu nháy lạc có thể nuốt phần còn lại của tệp. Công cụ cảnh báo và cho biết dòng.

Giới hạn

Đầu vào tối đa 5 triệu ký tự hoặc 10 MB với tệp. Ô kết quả hiện 200.000 ký tự đầu của kết quả rất lớn; sao chép và tải về luôn đầy đủ. Ngày tháng không được chuyển, vẫn là chữ.

Câu hỏi thường gặp

Dữ liệu của tôi có bị tải lên không?

Không. Việc chuyển đổi chạy trong trình duyệt, tệp được đọc trên thiết bị của bạn và không gửi đi đâu.

Công cụ biết dấu phân cách bằng cách nào?

Nó tách vài hàng đầu bằng từng ứng viên (dấu phẩy, chấm phẩy, tab, gạch đứng), bỏ qua dấu nằm trong ngoặc kép, rồi chọn dấu cho cùng số cột ở nhiều hàng nhất. Bạn luôn có thể tự chọn.

JSON lồng nhau được chuyển thành cột thế nào?

Các khóa lồng nhau nối bằng dấu chấm (address.city) và phần tử mảng được đánh số (tags.0, tags.1). Chọn "Giữ dạng JSON trong một ô" nếu không muốn làm phẳng mảng.