Chuyển đến nội dung

Chuyển JSON sang CSV

Biến kết quả trả về từ API, file xuất và JSON Lines thành CSV mở gọn gàng trong Excel — bản ghi được tự động tìm ra, trường lồng nhau trải phẳng thành các cột dễ đọc, và mã ID lớn giữ nguyên từng chữ số.

  • 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 JSON

Thả file .json hoặc .jsonl vào, hoặc dán JSON thẳng vào ô.

2

Chọn bản ghi

Danh sách bản ghi được tự động tìm ra, kể cả khi nằm sâu trong data.items. Chọn cách ghi mảng và kiểm tra bản xem trước.

3

Tải xuống

File CSV với dấu phân cách và bảng mã bạn cần, sẵn sàng cho Excel, Google Sheets hoặc cơ sở dữ liệu.

Trải phẳng một cây thành một lưới

JSON là một cái cây còn CSV là một hình chữ nhật, và toàn bộ việc chuyển đổi là câu hỏi làm sao để cái này thành cái kia. Trường hợp gọn gàng là một mảng các object có cùng các khóa — mỗi object là một hàng, mỗi khóa là một cột, và không mất gì cả. Hầu hết kết quả trả về từ API và file xuất đều có dạng đó, nên việc chuyển đổi thường cứ thế mà chạy. Mọi rắc rối đều đến từ những tài liệu không có dạng như vậy.

Object lồng nhau được trải phẳng bằng cách nối các khóa của chúng, nên một object địa chỉ nằm trong một khách hàng trở thành các cột như address.city và address.postcode — một quy ước mà mọi bảng tính đều xử lý được nhưng không tiêu chuẩn nào định nghĩa. Khóa xuất hiện ở một số object mà không có ở số khác sẽ trở thành cột để trống ở những hàng thiếu nó, và đó là cách đúng: cách còn lại là bỏ đi dữ liệu mà chỉ một số bản ghi mang theo.

Mảng lồng nhau là chỗ một cái lưới thực sự không theo kịp. Một bản ghi chứa ba dòng đơn hàng bên trong là một hàng chứa một danh sách, không phải ba hàng — biến nó thành ba hàng sẽ nhân bản mọi trường khác và lặng lẽ thay đổi ý nghĩa của dữ liệu. Vì vậy một mảng các object được mở rộng thành các hàng, còn các mảng khác được ghi vào ô của chúng dưới dạng văn bản. Nếu thứ bạn cần là các dòng đơn hàng chứ không phải các đơn hàng, hãy trỏ việc chuyển đổi vào mảng đó; một cái cây có hai danh sách song song không có một hình chữ nhật đúng duy nhất, và chọn cái nào là quyết định chỉ bạn mới đưa ra được.

Có hai chi tiết dễ gây phiền khi xuất ra. Giá trị chứa dấu phẩy, dấu ngoặc kép hoặc dấu xuống dòng được đặt trong ngoặc kép để giữ nguyên vẹn — đó là CSV đúng chuẩn, dù trông lạ nếu bạn xem file thô. Và một mã định danh dạng số dài là mối nguy khi file CSV đến tay bảng tính: Excel sẽ đọc nó như một con số, làm tròn khi vượt quá mười lăm chữ số và bỏ mọi số 0 ở đầu — đó là vấn đề do bảng tính gây ra chứ không phải do việc chuyển đổi.

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

jq là công cụ đúng khi cấu trúc cần được quyết định chứ không phải đoán: jq -r '.orders[] | [.id, .customer.name, .total] | @csv' chọn đúng các trường bạn muốn từ đúng cấp bạn muốn, đó là quyền kiểm soát mà một công cụ trải phẳng tự động không thể mang lại. Nó cũng xử lý theo luồng, nên dung lượng file không còn là vấn đề.

Với dữ liệu lồng nhau nói chung, Miller — mlr --ijson --ocsv flatten — và pandas.json_normalize của Python cho bạn quyền kiểm soát tường minh về độ sâu cần trải phẳng và cách xử lý danh sách. Còn nếu JSON thực sự mang tính phân cấp chứ không phải dạng bảng, chuyển nó sang CSV có thể là ý tưởng sai ngay từ đầu — một cơ sở dữ liệu hoặc file JSON phân tách theo dòng giữ được cấu trúc mà một cái lưới sắp sửa bỏ đi.

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

JSON lồng nhau trở thành cột như thế nào?

Mỗi trường lồng nhau trở thành một cột được đặt tên theo đường dẫn của nó: {"address": {"city": "Oslo"}} cho ra cột address.city. Các cột xuất hiện theo thứ tự chúng có mặt lần đầu trong dữ liệu, không theo bảng chữ cái, và bản ghi thiếu trường nào thì ô đó đơn giản để trống.

Mảng được xử lý thế nào?

Bạn tự chọn: gộp các giá trị vào một ô (“đỏ; xanh lá”), trải ra các cột đánh số (tags.0, tags.1), giữ nguyên dạng văn bản JSON, hoặc — với mảng các object như các dòng đơn hàng — ghi mỗi phần tử thành một hàng, lặp lại các trường của bản ghi cha.

Số lớn có được giữ chính xác không?

Có. Các mã ID vượt quá khả năng biểu diễn của JavaScript — ID của Twitter, Discord và ID cơ sở dữ liệu 64-bit — được sao chép đúng từng chữ số, trong khi hầu hết công cụ chuyển đổi lặng lẽ làm tròn 1234567890123456789 thành 1234567890123456800.

Có hỗ trợ JSON Lines (NDJSON) không?

Có. File có một object JSON trên mỗi dòng được tự động nhận diện, và mỗi dòng trở thành một hàng.

Nếu JSON của tôi bị lỗi thì sao?

Bạn sẽ thấy chính xác dòng và cột, với đoạn văn bản gây lỗi được tô sáng, kèm lời giải thích dễ hiểu — ví dụ một dấu phẩy thừa ở cuối, hoặc dấu nháy đơn sao chép từ mã JavaScript.

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

Không. JSON được đọc và CSV được ghi ngay tại đây; không có gì được gửi đi đâu và không lưu trữ gì cả.

Nên biết: Mỗi lần chỉ một mảng các object được mở rộng thành các hàng; các mảng khác được ghi vào ô của chú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.