Chuyển đến nội dung

Chuyển CSV sang JSON

Biến file CSV hoặc bảng được dán vào thành JSON gọn gàng — số và giá trị logic đúng kiểu, object lồng nhau dựng từ tiêu đề có dấu chấm, và đúng cấu trúc mà mã của bạn cần.

  • Không bao giờ lưu trữ
  • Không xếp hàng, không phải chờ
  • Không cần đăng ký, không watermark

Cách hoạt động

1

Thêm CSV

Thả file .csv hoặc .tsv vào, hoặc dán dữ liệu. Dấu phân cách và bảng mã được tự động nhận diện.

2

Chọn cấu trúc

Mảng các object, mảng các mảng, object theo khóa là cột đầu tiên, hoặc JSON Lines — cùng với kiểu dữ liệu, giá trị trống và thụt lề.

3

Sao chép hoặc tải xuống

Sao chép JSON vào bộ nhớ tạm hoặc lưu thành file .json.

Những chỗ CSV mơ hồ hơn vẻ ngoài

CSV không có tiêu chuẩn thực sự nào — chỉ có một bản đặc tả mang tính khuyến nghị từ năm 2005 mô tả cách hầu hết công cụ làm, và rất nhiều phần mềm làm theo cách khác. Vì vậy việc đầu tiên là xác định file thực sự là gì: các giá trị được phân cách bằng dấu phẩy, dấu chấm phẩy hay tab (các vùng châu Âu xuất ra dấu chấm phẩy, vì dấu phẩy là dấu thập phân của họ), hàng đầu tiên có phải tiêu đề không, và dấu ngoặc kép được xử lý thế nào. Một trường đặt trong ngoặc kép hoàn toàn hợp lệ khi chứa dấu phẩy, dấu xuống dòng và dấu ngoặc kép kép, vì vậy tách theo dấu phẩy là cách đọc sai, và một trình phân tích ngây thơ sẽ làm hỏng mọi file có chứa địa chỉ.

Kiểu dữ liệu là việc thứ hai, và JSON có những quy định mà CSV không có. Một ô CSV chỉ chứa văn bản, không gì khác; JSON phân biệt số, chuỗi, giá trị logic và null. Phải có thứ gì đó quyết định cái nào là cái nào, và những quyết định quan trọng là những quyết định dễ sai: số 0 ở đầu có ý nghĩa trong mã bưu chính, số điện thoại hay mã tài khoản, nên một giá trị như 01234 phải giữ nguyên là chuỗi chứ không thành số 1234. Điều tương tự áp dụng cho mã định danh dài, vốn bị mất độ chính xác khi là số JSON vượt quá khoảng chín triệu tỷ.

Ngày tháng giữ nguyên dạng chữ như ban đầu, vì JSON không có kiểu ngày tháng. 2024-03-05 được xuất ra thành chuỗi "2024-03-05", và đó là câu trả lời trung thực chứ không phải hạn chế — cách còn lại là đoán, và đoán chính là cách mà 03/05/2024 thành tháng Ba ở nước này và tháng Năm ở nước khác. Việc chuyển đổi chúng là quyết định của phần mềm sử dụng JSON, nơi biết rõ định dạng mình cần.

Bảng mã là lỗi âm thầm cuối cùng. File CSV không ghi chú gì về bảng mã ký tự của nó, nên một file lưu theo Windows-1252 mà đọc theo UTF-8 sẽ sinh ra chữ lỗi font đúng ở những hàng chứa tên có dấu — và dấu thứ tự byte (BOM) ở đầu file, thứ Excel tự thêm vào, sẽ hiện thành ký tự lạ trong tên trường đầu tiên nếu không được xử lý. Cả hai đều là đặc tính của CSV chứ không phải của bất kỳ công cụ chuyển đổi nào.

Khi bạn cần công cụ khác

Với file quá lớn để giữ trong bộ nhớ, hoặc với mọi thứ chạy bằng script, csvkit được làm ra đúng cho việc này: csvjson --stream data.csv chuyển đổi dần từng phần, csvlook cho bạn xem trước mình đang có gì, và csvclean sửa những hàng lệch cột vốn làm hỏng mọi bước phía sau. Miller — mlr --icsv --ojson cat data.csv — làm điều tương tự với tốc độ rất cao và xử lý được JSON phân tách theo dòng, thứ mà hầu hết các quy trình xử lý dữ liệu thực sự cần.

Khi kiểu dữ liệu quan trọng hơn sự tiện lợi, hãy chuyển đổi bằng mã với kiểu dữ liệu được khai báo thay vì suy luận. pandas của Python với ánh xạ dtype tường minh, hoặc một script nhỏ có lược đồ, giúp mã bưu chính vẫn là mã bưu chính và mã định danh giữ đủ mọi chữ số — điều mà không cơ chế suy luận tự động nào đảm bảo được trên một file mà nó chưa xem hết.

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

Tôi nên chọn cấu trúc JSON nào?

Mảng các object — [{"name": "Ada", "age": 36}] — phù hợp với hầu hết mọi API và thư viện. Mảng các mảng là gọn nhất. Object theo khóa cho phép mã tra cứu bản ghi theo ID. JSON Lines đặt mỗi bản ghi trên một dòng, dành cho công cụ xử lý luồng, BigQuery và quy trình xử lý log.

Số và giá trị logic được xác định thế nào?

Một lần cho mỗi cột: một cột chỉ trở thành số khi mọi giá trị trong đó đều là số, nên “007” và 7 không bao giờ bị trộn lẫn dưới cùng một khóa. Giá trị có số 0 ở đầu, và mã ID quá dài để JavaScript lưu chính xác, được giữ nguyên dạng chuỗi. true và false trở thành giá trị logic, còn ô trống trở thành null — hoặc chuỗi rỗng, hoặc bị bỏ ra, tùy bạn chọn.

Công cụ có tạo được JSON lồng nhau không?

Có. Khi bật lồng nhau, một tiêu đề như address.city trở thành {"address": {"city": …}}, còn tags.0, tags.1 trở thành một mảng.

Dữ liệu của tôi có bị lưu trữ ở đâu không?

Không. Không có gì được gửi đi đâu và không lưu trữ gì cả.

Còn dấu chấm phẩy, tab và các bảng mã khác thì sao?

Dấu phẩy, dấu chấm phẩy, tab và dấu gạch đứng được tự động nhận diện, cũng như UTF-8, UTF-16 và các bảng mã Windows cũ, nên chữ có dấu và chữ không phải Latin đều được giữ nguyên vẹn.

Còn tên cột trùng nhau hoặc để trống thì sao?

Tên trùng được thêm số (name, name_2) và tiêu đề trống được đặt tên theo vị trí (column_3), nên không giá trị nào bị ghi đè và bạn được báo những gì đã thay đổi.

Nên biết: Ngày tháng giữ nguyên dạng chữ như trong file, vì JSON không có kiểu ngày tháng. File rất lớn bị giới hạn bởi bộ nhớ của trình duyệt.

Đặt công cụ này lên website của bạn

Miễn phí cho mọi blog, trang lớp học hay bài viết hướng dẫn. Chỉ cần dán một đoạn mã là khách truy cập có thể dùng ngay trên trang của bạn.