JSON, YAML, CSV: Khi nào dùng định dạng nào và cách chuyển đổi
Bạn tải xuống một bộ dữ liệu ở định dạng CSV. API trả về JSON. Tệp cấu hình ở dạng YAML. Đồng nghiệp gửi bạn tệp JSON và yêu cầu chuyển sang bảng tính. Đồng nghiệp khác đưa bạn cấu hình YAML và bạn cần chuyển sang JSON cho công cụ khác.
Chuyển đổi định dạng dữ liệu là một trong những tác vụ có vẻ đơn giản cho đến khi bạn thực sự phải làm. Hiểu khi nào dùng định dạng nào, và cách chuyển đổi giữa chúng, sẽ tiết kiệm thời gian thực sự.
Ba định dạng tổng quan
JSON (JavaScript Object Notation)
{
"name": "Alice",
"age": 30,
"skills": ["Python", "SQL", "Docker"],
"address": {
"city": "Berlin",
"country": "Germany"
}
}
Là gì: Định dạng văn bản cho dữ liệu có cấu trúc, hỗ trợ đối tượng (cặp khóa-giá trị), mảng (danh sách có thứ tự), chuỗi, số, boolean và null.
Điểm mạnh: Máy đọc được, hỗ trợ rộng rãi trong mọi ngôn ngữ lập trình, xử lý dữ liệu lồng nhau tự nhiên, cú pháp chặt chẽ ngăn ngừa sự mơ hồ.
Điểm yếu: Dài dòng (nhiều ngoặc nhọn, ngoặc vuông và dấu ngoặc kép), không dễ đọc bằng YAML, không hỗ trợ bình luận.
YAML (YAML Ain't Markup Language)
name: Alice
age: 30
skills:
- Python
- SQL
- Docker
address:
city: Berlin
country: Germany
Là gì: Định dạng tuần tự hóa dữ liệu thân thiện với con người, sử dụng thụt lề thay vì ngoặc nhọn và ngoặc vuông. Nó là tập cha của JSON, nghĩa là JSON hợp lệ cũng là YAML hợp lệ.
Điểm mạnh: Cực kỳ dễ đọc, hỗ trợ bình luận, ít nhiễu thị giác, tuyệt vời cho tệp cấu hình.
Điểm yếu: Nhạy cảm với thụt lề (dễ hỏng với khoảng trắng sai), một số hành vi phân tích đáng ngạc nhiên, phân tích chậm hơn JSON.
CSV (Comma-Separated Values)
name,age,city,country
Alice,30,Berlin,Germany
Bob,25,London,UK
Charlie,35,Paris,France
Là gì: Định dạng văn bản phẳng trong đó mỗi dòng là một hàng và các giá trị trong hàng được phân tách bằng dấu phẩy (hoặc đôi khi dấu chấm phẩy hoặc tab).
Điểm mạnh: Phổ quát (mọi bảng tính, cơ sở dữ liệu và công cụ dữ liệu đều hỗ trợ), gọn cho dữ liệu dạng bảng, dễ đọc và tạo.
Điểm yếu: Không hỗ trợ dữ liệu lồng nhau, không có kiểu dữ liệu (mọi thứ là chuỗi), không có tiêu chuẩn cho ký tự đặc biệt, giới hạn ở bảng phẳng.
Bạn có biết? YAML về mặt kỹ thuật là tập cha của JSON. Điều này có nghĩa là bất kỳ tài liệu JSON hợp lệ nào cũng tự động là tài liệu YAML hợp lệ. Bạn có thể dán JSON vào trình phân tích YAML và nó sẽ hoạt động. Ngược lại thì không — các tính năng của YAML (bình luận, neo, chuỗi nhiều dòng) không có tương đương JSON.
Khi nào dùng định dạng nào
| Trường hợp sử dụng | Định dạng tốt nhất | Lý do |
|---|---|---|
| Yêu cầu và phản hồi API | JSON | Tiêu chuẩn ngành, mọi ngôn ngữ đều có hỗ trợ native |
| Tệp cấu hình | YAML | Dễ đọc, hỗ trợ bình luận cho tài liệu |
| Dữ liệu bảng tính | CSV | Mở trực tiếp trong Excel, Google Sheets, v.v. |
| Xuất cơ sở dữ liệu | CSV | Dữ liệu bảng phẳng ánh xạ trực tiếp sang hàng và cột |
| Dữ liệu lồng nhau phức tạp | JSON hoặc YAML | CSV không thể biểu diễn lồng nhau |
| Trao đổi dữ liệu giữa các hệ thống | JSON | Phân tích rõ ràng, đặc tả chặt chẽ |
| Cấu hình do người chỉnh sửa | YAML | Dễ đọc và chỉnh sửa bằng tay hơn |
| Danh sách dữ liệu đơn giản | CSV | Nhẹ, không có chi phí phụ |
Chuyển đổi giữa các định dạng
JSON sang YAML
Đây là chuyển đổi cấu hình phổ biến nhất. Bạn có cấu hình JSON từ một công cụ và cần YAML cho công cụ khác. Việc chuyển đổi đơn giản vì YAML hỗ trợ mọi thứ JSON có.
{"server": {"host": "0.0.0.0", "port": 8080}}
Trở thành:
server:
host: 0.0.0.0
port: 8080
YAML sang JSON
Chuyển từ YAML sang JSON cũng đơn giản, nhưng bạn sẽ mất bình luận (JSON không hỗ trợ) và kết quả dài dòng hơn.
JSON sang CSV
Hoạt động tốt cho mảng JSON phẳng (mảng các đối tượng có cùng khóa). Mỗi đối tượng trở thành một hàng, và mỗi khóa trở thành tiêu đề cột.
[
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25}
]
Trở thành:
name,age
Alice,30
Bob,25
Cảnh báo Chuyển đổi JSON sang CSV sẽ gặp vấn đề khi JSON chứa đối tượng hoặc mảng lồng nhau. CSV là phẳng — nó không có cách biểu diễn mảng "skills" hay đối tượng "address" lồng nhau. Dữ liệu lồng nhau phải được làm phẳng (address.city, address.country thành các cột riêng) hoặc tuần tự hóa thành chuỗi trong ô CSV.
CSV sang JSON
Mỗi hàng trở thành một đối tượng, với tiêu đề cột làm khóa. Điều này gọn gàng cho dữ liệu bảng đơn giản.
CSV sang YAML
Ít phổ biến hơn, nhưng theo cùng logic: mỗi hàng trở thành một ánh xạ YAML, và toàn bộ tệp trở thành một chuỗi YAML.
Các lỗi thường gặp
Vấn đề mã hóa CSV
Tệp CSV có thể sử dụng các bảng mã ký tự khác nhau (UTF-8, Latin-1, Windows-1252). Nếu bạn mở CSV và thấy ký tự lỗi như "München" thay vì "München," đó là sự không khớp mã hóa. Hãy luôn sử dụng UTF-8 khi có thể.
Nhầm lẫn dấu phân cách CSV
Không phải tất cả CSV đều dùng dấu phẩy. CSV Châu Âu thường dùng dấu chấm phẩy vì dấu phẩy được dùng làm dấu phân cách thập phân trong nhiều định dạng số Châu Âu. Giá trị phân tách bằng tab (TSV) là một biến thể phổ biến khác.
Lỗi thụt lề YAML
YAML sử dụng thụt lề (dấu cách, không bao giờ dùng tab) để xác định cấu trúc. Thụt lề không nhất quán, hoặc trộn tab và dấu cách, tạo ra lỗi phân tích hoặc hiểu sai thầm lặng. Hãy dùng chính xác 2 dấu cách cho mỗi cấp thụt lề và cấu hình trình soạn thảo chèn dấu cách thay vì tab.
Cảnh báo Trong YAML, chuỗi no được phân tích thành boolean false, và yes được phân tích thành true. Chuỗi 1.0 được phân tích thành số. Nếu bạn muốn chuỗi ký tự "no," "yes," hoặc "1.0," bạn phải đặt trong dấu ngoặc kép: "no", "yes", "1.0". Đây là một trong những lỗi nổi tiếng nhất của YAML.
Dấu phẩy thừa JSON
JSON không cho phép dấu phẩy thừa. Đây là hợp lệ trong JavaScript nhưng không hợp lệ trong JSON:
{"name": "Alice", "age": 30,} // JSON không hợp lệ: dấu phẩy thừa
Hiệu suất tệp lớn
Với bộ dữ liệu rất lớn (hàng triệu hàng), CSV hiệu quả hơn JSON hoặc YAML vì có chi phí tối thiểu cho mỗi bản ghi. JSON thêm ngoặc nhọn và dấu ngoặc kép cho mỗi giá trị, làm tăng đáng kể kích thước tệp cho dữ liệu bảng lớn.
Công cụ thực tế để chuyển đổi
Để chuyển đổi nhanh, một lần, công cụ trên trình duyệt là lựa chọn nhanh nhất. Bạn dán hoặc tải lên dữ liệu, chọn định dạng đích và nhận kết quả ngay lập tức.
Mẹo Chuyển đổi giữa các định dạng JSON, YAML và CSV ngay lập tức: Cách chuyển đổi định dạng dữ liệu. Dán dữ liệu, chọn định dạng đích và sao chép hoặc tải xuống kết quả.
Để làm việc cụ thể với JSON, công cụ định dạng xác thực và làm đẹp JSON là vô giá:
- JSON Formatter — xác thực, định dạng và nén JSON
- JSON to CSV Converter — chuyển đổi mảng JSON sang CSV
- YAML-JSON Converter — chuyển đổi giữa YAML và JSON
- CSV Viewer — xem và khám phá tệp CSV
Chuyển đổi dữ liệu ngay:
Tất cả công cụ đều miễn phí và hoạt động trực tiếp trong trình duyệt.