fixmint
VI

Chuyển CSV sang JSON và ngược lại mà không làm hỏng dữ liệu

Tác giả: · · cập nhật 8 tháng 11, 2026 · 5 phút đọc

CSV là bảng văn bản thuần: mỗi dòng là một bản ghi, các trường được ngăn cách bằng dấu phân cách, thường là dấu phẩy. CSV dễ bị lỗi khi một trường chứa chính dấu phân cách, dấu ngoặc kép hoặc ký tự xuống dòng, vì trình đọc phải phân biệt được cấu trúc và nội dung. Hãy tuân theo quy tắc đặt ngoặc kép, kiểm tra dấu phân cách và dòng tiêu đề, và giữ các số có số 0 ở đầu dưới dạng văn bản. Phần còn lại của bài viết giải thích việc chuyển đi rồi chuyển ngược lại có thể giữ được gì và không thể giữ được gì.

Chuyển CSV sang JSONCần đổi CSV sang JSON hoặc ngược lạiDùng miễn phí

CSV thực chất là gì

CSV không có một tiêu chuẩn chính thức duy nhất, nhưng RFC 4180 mô tả dạng phổ biến nhất, và hầu hết các trình đọc đều theo chuẩn này. Các quy tắc cốt lõi gói gọn trong danh sách ngắn:

  • Mỗi bản ghi nằm trên một dòng riêng, và RFC quy định dòng kết thúc bằng ký tự xuống đầu dòng (carriage return) và ký tự xuống dòng (line feed), tức CRLF.
  • Các trường được ngăn cách bằng dấu phẩy.
  • Trường có chứa dấu phẩy, dấu ngoặc kép hoặc ký tự xuống dòng thì phải được đặt trong dấu ngoặc kép.
  • Dấu ngoặc kép nằm bên trong một trường đã được đặt trong ngoặc kép thì được viết thành hai dấu ngoặc kép.

Vì vậy dòng 1001,"Smith, Ann",02134 có ba trường, vì dấu phẩy nằm trong ngoặc kép là nội dung. Bộ tách chia tại mọi dấu phẩy sẽ tìm ra bốn trường. Trình đọc của fixmint áp dụng đúng các quy tắc này: một trường đặt trong ngoặc kép có thể chứa dấu phân cách, ký tự xuống dòng và dấu ngoặc kép được viết đôi; ngoặc kép không được đóng sẽ được báo kèm dòng bắt đầu của nó.

Vì sao dấu phân cách có thể thay đổi

Dấu phẩy là mặc định của RFC, nhưng ở nơi dấu phẩy là dấu thập phân, nên 1,5 nghĩa là một rưỡi, và bảng tính thường lưu CSV với dấu chấm phẩy. Các tệp phân tách bằng tab (TSV) tránh được xung đột này trong hầu hết dữ liệu, vì tab hiếm khi xuất hiện trong văn bản.

Menu Dấu phân cách có các lựa chọn Tự động, Dấu phẩy, Dấu chấm phẩy, Tab và Gạch đứng. Tự động đọc mười dòng đầu, đếm số lần xuất hiện của từng ký hiệu ứng viên ngoài dấu ngoặc kép, rồi chọn ký hiệu có số lần trên mỗi dòng ổn định nhất. Hãy tự chọn dấu phân cách khi Tự động đoán sai.

Chuyển đổi trên fixmint

Ví dụ minh họa dùng tùy chọn mặc định của công cụ Chuyển CSV sang JSON.

Ví dụ minh họa

Dán CSV sau, với Dòng đầu là tiêu đề được đánh dấu:

id,name,zip,note
1001,"Smith, Ann",02134,"She said ""hi"""
1002,Bo,10001,"line one
line two"

Khi tắt Chuyển số và đặt Thụt lề JSON là 2 khoảng trắng, công cụ trả về:

[
  {
    "id": "1001",
    "name": "Smith, Ann",
    "zip": "02134",
    "note": "She said \"hi\""
  },
  {
    "id": "1002",
    "name": "Bo",
    "zip": "10001",
    "note": "line one\nline two"
  }
]

Khi bật Chuyển số, id và zip 10001 trở thành số, còn 02134 vẫn là văn bản.

Các bước

  1. Dán CSV, hoặc kéo thả tệp .csv, .tsv, .txt hoặc .json.
  2. Kiểm tra Dòng đầu là tiêu đề, Dấu phân cách và Chuyển số. Chọn Thụt lề JSON là 2 khoảng trắng, Tab hoặc Thu gọn.
  3. Sao chép kết quả, hoặc tải xuống dưới dạng .json.

Giữ số dưới dạng văn bản

Số trong JSON không được có số 0 ở đầu, nên 02134 không phải là số JSON hợp lệ. Mã bưu chính, số điện thoại và mã sản phẩm phải giữ dưới dạng văn bản, nếu không số 0 sẽ mất. Khi bật Chuyển số, công cụ chuyển 10001 thành số nhưng giữ 02134 là chuỗi. Tùy chọn này mặc định tắt. Nó chỉ chuyển các giá trị dùng dấu chấm làm dấu thập phân, nên 1,5 trong tệp dấu chấm phẩy vẫn được giữ nguyên như đã gõ.

Mã định danh dài cũng cần lưu ý. JavaScript, thứ chạy phần lớn JSON trên trình duyệt, lưu số dưới dạng số dấu phẩy động 64 bit. Số nguyên chỉ chính xác đến 9.007.199.254.740.991, tức 2 mũ 53 trừ 1. Số 12345678901234567890 trở thành 12345678901234567000 khi một chương trình JavaScript đọc nó. Công cụ ghi các chữ số đúng như đã gõ, nhưng chương trình phân tích JSON bằng JavaScript sẽ làm tròn chúng. Hãy giữ ID dưới dạng chuỗi. Định dạng JSON cũng giữ nguyên các số như vậy và cho biết đã giữ bao nhiêu số.

JSON lồng nhau và chuyển ngược lại sang CSV

CSV là dạng phẳng, còn JSON có thể lồng nhau. Khi chuyển JSON sang CSV, công cụ tạo một cột cho mỗi khóa trong tất cả các đối tượng, theo thứ tự khóa xuất hiện lần đầu. Một đối tượng hoặc danh sách lồng nhau được ghi vào ô dưới dạng văn bản JSON, null thành ô trống, còn true và false được ghi thành chữ. Các dòng được nối bằng CRLF, và một trường chỉ được đặt trong ngoặc kép khi nó chứa dấu phân cách, dấu ngoặc kép, ký tự xuống dòng, hoặc khoảng trắng ở đầu hoặc cuối.

Đầu vào bắt đầu bằng [ hoặc { được đọc như JSON. Nút chuyển hướng, có nhãn CSV → JSON hoặc JSON → CSV, đổi chiều chuyển đổi. Ở hướng JSON → CSV, các tùy chọn đầu ra hiển thị menu Dấu phân cách và tùy chọn Dành cho Excel.

Chuyển đổi qua lại làm mất thông tin. null và chuỗi rỗng đều thành ô trống, và cấu trúc lồng nhau không được khôi phục, nên hãy giữ JSON gốc nếu bạn cần cấu trúc của nó.

Excel, UTF-8 và dấu thứ tự byte (BOM)

Tệp CSV là các byte, và trình đọc phải biết mã hóa. UTF-8 chứa được chữ có dấu và các bảng chữ cái khác. Dấu thứ tự byte (BOM), gồm ba byte ở đầu tệp, đánh dấu tệp là UTF-8. Nếu không có nó, một số chương trình bảng tính đọc tệp theo bảng mã địa phương, và chữ có dấu sẽ thành ký tự lạ. Bảng tính cũng thường biến 02134 thành 2134 khi mở CSV.

Tùy chọn Dành cho Excel chỉ thêm BOM vào tệp CSV tải xuống, không bao giờ vào văn bản đã sao chép, và chỉ ở hướng JSON → CSV. Trình đọc sẽ bỏ BOM khỏi đầu vào, nên tệp đã có BOM vẫn chuyển đổi không lỗi.

Các trường hợp đặc biệt

  • Dòng lệch số cột. Khi bật dòng tiêu đề, một dòng ngắn được đệm bằng giá trị rỗng, còn dòng dài hơn giữ các giá trị thừa dưới tên column_N. Kết quả báo có bao nhiêu dòng khác với tiêu đề.
  • Tiêu đề bị lặp hoặc trống. Tên bị lặp sẽ nhận _2, _3 và cứ thế tiếp tục, còn tên trống thành column_N. Cả hai thay đổi này ngăn hai khóa ghi đè lên nhau.
  • Dấu ngoặc kép cong. Dấu ngoặc kép thông minh từ trình soạn thảo văn bản không phải là dấu ngoặc kép CSV, nên một trường như “Smith, Ann” sẽ bị tách tại dấu phẩy. Hãy đổi chúng thành dấu thẳng trước, bằng Sửa văn bản dán vào hoặc theo cách mô tả trong hướng dẫn về dấu ngoặc kép cong.
  • Xuống dòng bên trong dấu ngoặc kép. Một trường trải dài hai dòng là một bản ghi, nhưng Xóa dòng trùng lặp tách đầu vào tại mọi ký tự xuống dòng, nên sẽ coi hai nửa là hai dòng riêng. Hãy chuyển sang JSON và so sánh các đối tượng, hoặc kiểm tra thủ công. Công cụ vẫn hữu ích với danh sách mỗi dòng một giá trị.
  • File lớn. Ô kết quả chỉ hiển thị 100.000 ký tự đầu, nhưng Sao chép và tải xuống bao gồm toàn bộ đầu ra.
  • JSON không hợp lệ. Bộ chuyển đổi báo dòng và cột có lỗi, kèm dấu mũi tên chỉ vào ký tự. Định dạng JSON giải thích các lỗi thường gặp, còn hướng dẫn về lỗi JSON đi sâu hơn.

Khoảng trắng thừa quanh các trường, dòng trống ở giữa tệp và dấu ngoặc kép dùng không nhất quán gây ra hầu hết lỗi CSV, thường còn trước cả khi dấu phân cách trở thành vấn đề. Làm sạch CSV trước, rồi mới chuyển đổi.

Được dịch từ Bản tiếng Anh với sự hỗ trợ của AI.

Bình luận

    Chưa có bình luận nào. Hãy là người đầu tiên.

    Đánh giá của bạn (không bắt buộc)

    Email của bạn không bao giờ được hiển thị hoặc lưu lại.

    Bìa của How to Remain Valuable When Intelligence Becomes CheapHow to Remain Valuable When Intelligence Becomes Cheap

    224 trang về những lợi thế của con người, kinh tế và chiến lược vẫn khan hiếm khi AI có thể làm phần lớn công việc tư duy.

    $3.84Mua trên GumroadBản tiếng Anh