Bỏ qua đến nội dung
LeedyBox
Ủng hộ

Chuyển đổi giữa JSON, CSV và YAML

JSON, CSV và YAML thường có thể chứa cùng một dữ liệu, nhưng chúng không tương ứng 1:1. Hướng dẫn này giải thích mỗi định dạng mạnh ở điểm nào, những chi tiết nào có thể thay đổi khi chuyển đổi và cách kiểm tra kết quả.

Mỗi định dạng mạnh ở điểm nào

JSON là định dạng phổ biến cho API web và cấu hình do chương trình đọc. JSON có một tập kiểu dữ liệu nhỏ và rõ ràng: đối tượng, mảng, chuỗi, số, boolean và null. Cú pháp chặt chẽ giúp phần mềm dễ phân tích, nhưng JSON không có chú thích.

CSV là một bảng: mỗi dòng là một hàng, mỗi cột một giá trị. Bảng tính, cơ sở dữ liệu và công cụ báo cáo nhập CSV dễ dàng, và định dạng này gọn nhẹ với các tập dữ liệu lớn, phẳng. CSV không có cách chuẩn để mô tả kiểu dữ liệu hay cấu trúc lồng nhau.

YAML được thiết kế để con người viết và đọc. YAML phổ biến cho tệp cấu hình vì cho phép chú thích, dùng thụt lề thay cho dấu ngoặc và có thể mô tả cùng các cấu trúc như JSON. Cú pháp linh hoạt cũng có nghĩa là những lỗi nhỏ về thụt lề hoặc dấu ngoặc kép có thể làm thay đổi ý nghĩa.

Đặc điểmJSONCSVYAML
Đối tượng và mảng lồng nhauCóKhông (bảng phẳng)Có
Kiểu dữ liệuChuỗi, số, boolean, nullChỉ văn bảnSuy ra từ giá trị
Chú thíchKhôngKhôngCó
Cách dùng điển hìnhAPI, dữ liệu ứng dụngBảng tính, nhập dữ liệuTệp cấu hình

Dữ liệu lồng nhau bị làm phẳng trong CSV

Tệp CSV chỉ có hàng và cột, nên dữ liệu lồng nhau phải được định hình lại. Có hai cách phổ biến. Cách thứ nhất làm phẳng cấu trúc thành tên cột như address.city và address.zip. Cách thứ hai giữ phần lồng nhau dưới dạng chuỗi JSON trong một ô duy nhất. Công cụ Chuyển đổi dữ liệu của LeedyBox cung cấp cả hai tùy chọn.

Cả hai cách đều có ưu nhược điểm. Cột được làm phẳng dễ đọc trong bảng tính, nhưng các mảng có độ dài khác nhau tạo ra nhiều cột thưa. Chuỗi JSON trong ô giữ được cấu trúc nhưng khó sửa bằng tay hơn. Nếu sau này bạn chuyển ngược lại sang JSON, hãy kiểm tra cấu trúc có khớp với dữ liệu ban đầu không.

Kiểu dữ liệu trở thành văn bản trong CSV

CSV lưu mọi giá trị dưới dạng văn bản. Số 42, chuỗi "42" và boolean true trông giống hệt nhau trong một ô. Khi đọc lại tệp CSV, chương trình phải đoán hoặc được chỉ định cột nào là số hay ngày tháng. Công cụ chuyển đổi của LeedyBox đọc giá trị CSV dưới dạng văn bản, nên số từ tệp CSV sẽ xuất hiện dưới dạng chuỗi trong JSON trừ khi bạn thay đổi chúng.

Ứng dụng bảng tính còn tự đoán theo cách riêng: chúng có thể xóa số 0 ở đầu mã bưu chính hoặc số điện thoại, chuyển số dài thành ký hiệu khoa học, hoặc hiểu giá trị là ngày tháng. Ô bắt đầu bằng =, +, - hoặc @ có thể bị coi là công thức; công cụ chuyển đổi có thiết lập tùy chọn chống công thức Excel cho đầu ra CSV.

Chú thích và kiểu dữ liệu trong YAML

JSON không có chú thích, nên khi chuyển YAML sang JSON, chú thích sẽ bị loại bỏ. Chuyển ngược lại không khôi phục được chúng. Hãy giữ tệp YAML gốc nếu chú thích quan trọng.

YAML đoán kiểu từ các giá trị không có dấu ngoặc kép. Theo quy tắc YAML 1.1 cũ hơn, vẫn được một số trình phân tích sử dụng, các từ như no, yes, on và off trở thành boolean, nên một mã quốc gia như NO có thể biến thành false. Giá trị như 2026-10-02 có thể trở thành đối tượng ngày tháng, còn 1e3 hoặc 010 có thể bị đọc thành số. Công cụ chuyển đổi của LeedyBox đọc YAML theo core schema của YAML 1.2, giữ no và ngày tháng dưới dạng văn bản, nhưng các công cụ khác đọc tệp của bạn có thể hoạt động khác. Đặt trong dấu ngoặc kép những giá trị phải giữ nguyên là văn bản là thói quen an toàn nhất.

Số lớn trong JavaScript

JavaScript lưu số dưới dạng số dấu phẩy động 64 bit. Không phải mọi số nguyên lớn hơn 9.007.199.254.740.991 (253 − 1) đều được biểu diễn chính xác, nên một ID lớn như 12345678901234567891 có thể bị làm tròn mà không có cảnh báo khi phân tích. Điều này ảnh hưởng đến mọi công cụ chuyển đổi chạy trên trình duyệt, kể cả công cụ này; công cụ sẽ hiển thị thông báo khi phát hiện những số như vậy. ID cơ sở dữ liệu và các định danh dài khác nên được lưu dưới dạng chuỗi để an toàn hơn.

Kiểm tra kết quả

Một lần chuyển đổi tạo ra đầu ra hợp lệ chưa chắc đã đúng. Trước khi dùng kết quả:

  • So sánh số hàng hoặc số mục với dữ liệu nguồn.
  • Kiểm tra ngẫu nhiên vài bản ghi, kể cả bản ghi có giá trị rỗng, ký tự đặc biệt, ký tự xuống dòng hoặc dữ liệu lồng nhau.
  • Kiểm tra các cột cần là số, boolean hoặc ngày tháng trong hệ thống đích.
  • Tìm các số dài có thể đã bị làm tròn.
  • Xác thực đầu ra bằng chương trình sẽ đọc nó, trước tiên hãy dùng bản sao dữ liệu của bạn.

Công cụ So sánh văn bản có thể giúp so sánh tệp gốc với kết quả sau khi chuyển đổi đi và về.

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

Tôi có thể chuyển JSON sang CSV rồi ngược lại mà không có thay đổi không?

Chỉ với dữ liệu đơn giản, phẳng, và ngay cả khi đó, số và boolean thường trở lại dưới dạng văn bản. Dữ liệu lồng nhau và kiểu dữ liệu phụ thuộc vào tùy chọn đã dùng, vì vậy hãy so sánh kết quả với bản gốc.

Vì sao giá trị YAML của tôi biến thành true hoặc false?

Một số trình phân tích YAML coi các từ không có dấu ngoặc kép như yes, no, on và off là boolean. Hãy đặt giá trị trong dấu ngoặc kép để giữ nó là văn bản.

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

Công cụ Chuyển đổi dữ liệu của LeedyBox chạy trên trình duyệt của bạn, nên dữ liệu bạn dán được xử lý trên thiết bị của bạn.