Dù bạn đang cấu hình ứng dụng web, trao đổi dữ liệu giữa các dịch vụ, phân tích bản xuất bảng tính, hay đọc phản hồi API, bạn sẽ gặp dữ liệu được lưu trữ trong các định dạng văn bản có cấu trúc. Bốn định dạng phổ biến nhất là JSON, YAML, CSV và XML.
Mỗi định dạng được thiết kế với những mục tiêu khác nhau, và việc chọn đúng phụ thuộc vào trường hợp sử dụng của bạn. Bài viết này giải thích mỗi định dạng là gì, trông như thế nào, khi nào nên dùng, và cách chúng so sánh với nhau.
JSON — JavaScript Object Notation
JSON đã trở thành định dạng trao đổi dữ liệu thống trị trên web. Bất chấp tên gọi, nó độc lập với ngôn ngữ lập trình và được sử dụng ở khắp nơi.
Ví dụ cú pháp:
{
"name": "Alice Martin",
"age": 34,
"skills": ["Python", "SQL", "Docker"],
"address": {
"city": "Lyon",
"country": "France"
}
}
Đặc điểm chính:
- Các cặp khóa-giá trị với cú pháp sạch sẽ, dễ đọc
- Hỗ trợ chuỗi, số, boolean, mảng, đối tượng và null
- Không cho phép bình luận trong JSON tiêu chuẩn
- Cú pháp nghiêm ngặt — dấu phẩy thừa và dấu nháy đơn đều là lỗi
Trường hợp sử dụng phổ biến: REST API, tệp cấu hình (package.json, tsconfig.json), cơ sở dữ liệu NoSQL (MongoDB), trao đổi dữ liệu giữa frontend và backend.
Nên biết. Cú pháp nghiêm ngặt của JSON vừa là điểm mạnh vừa là điểm yếu. Nó làm cho việc phân tích đáng tin cậy và rõ ràng, nhưng cũng có nghĩa là một dấu phẩy thiếu hay thừa sẽ làm hỏng toàn bộ tệp.
YAML — YAML Ain't Markup Language
YAML được thiết kế để trở thành định dạng tuần tự hóa dữ liệu dễ đọc nhất có thể. Nó sử dụng thụt lề thay vì ngoặc và đặc biệt phổ biến cho các tệp cấu hình.
Ví dụ cú pháp:
name: Alice Martin
age: 34
skills:
- Python
- SQL
- Docker
address:
city: Lyon
country: France
Đặc điểm chính:
- Cấu trúc dựa trên thụt lề (không có ngoặc vuông hay ngoặc nhọn)
- Hỗ trợ bình luận với
# - Hỗ trợ tất cả kiểu dữ liệu JSON cộng thêm (ngày tháng, chuỗi nhiều dòng)
- Nhạy cảm khoảng trắng — thụt lề sai sẽ làm hỏng tệp
Trường hợp sử dụng phổ biến: Tệp Docker Compose, manifest Kubernetes, pipeline CI/CD (GitHub Actions, GitLab CI), Ansible playbook, cấu hình Hugo/Jekyll.
YAML là tập cha của JSON, nghĩa là bất kỳ tài liệu JSON hợp lệ nào cũng là YAML hợp lệ. Tuy nhiên, tính linh hoạt của YAML có thể là con dao hai lưỡi — việc ép kiểu ngầm (ví dụ, yes được hiểu là boolean true, hoặc 3.10 trở thành 3.1) đã gây ra nhiều lỗi tinh vi.
CSV — Comma-Separated Values
CSV là định dạng dữ liệu có cấu trúc đơn giản nhất. Nó lưu trữ dữ liệu dạng bảng dưới dạng văn bản thuần, với mỗi dòng là một hàng và các giá trị được phân tách bằng dấu phẩy (hoặc đôi khi là dấu chấm phẩy, tab hoặc dấu phân cách khác).
Ví dụ cú pháp:
name,age,city,country
Alice Martin,34,Lyon,France
Bob Dupont,28,Paris,France
Carol Smith,41,London,UK
Đặc điểm chính:
- Cực kỳ đơn giản — chỉ là văn bản với dấu phân cách
- Không có kiểu dữ liệu — mọi thứ đều là chuỗi
- Không có cách chuẩn để biểu diễn dữ liệu lồng nhau
- Không có tiêu chuẩn phổ quát chính thức (RFC 4180 tồn tại nhưng không được tuân theo phổ biến)
- Kích thước tệp rất nhỏ
Trường hợp sử dụng phổ biến: Xuất bảng tính, nhập/xuất cơ sở dữ liệu, phân tích dữ liệu (pandas, R), trao đổi dữ liệu đơn giản, tệp nhật ký.
Sự đơn giản của CSV vừa là điểm mạnh lớn nhất vừa là hạn chế lớn nhất. Nó hoàn hảo cho dữ liệu dạng bảng phẳng nhưng không thể biểu diễn cấu trúc phân cấp. Các trường hợp đặc biệt (dấu phẩy trong giá trị, trường nhiều dòng, vấn đề mã hóa) làm cho việc phân tích phức tạp hơn vẻ bề ngoài.
XML — Extensible Markup Language
XML là định dạng trao đổi dữ liệu thống trị trước khi JSON lên ngôi. Nó sử dụng cú pháp dựa trên thẻ tương tự HTML và hỗ trợ các tính năng phức tạp như schema, namespace và biến đổi.
Ví dụ cú pháp:
<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>Alice Martin</name>
<age>34</age>
<skills>
<skill>Python</skill>
<skill>SQL</skill>
<skill>Docker</skill>
</skills>
<address>
<city>Lyon</city>
<country>France</country>
</address>
</person>
Đặc điểm chính:
- Cấu trúc dựa trên thẻ với thẻ mở và đóng
- Hỗ trợ thuộc tính, namespace, schema (XSD) và biến đổi (XSLT)
- Hỗ trợ bình luận
- Rất dài dòng so với các định dạng khác
- Tiêu chuẩn được định nghĩa cực kỳ rõ ràng với xác thực nghiêm ngặt
Trường hợp sử dụng phổ biến: Dịch vụ web SOAP, tích hợp doanh nghiệp, định dạng tài liệu (DOCX, SVG, RSS), tệp cấu hình trong hệ sinh thái Java/.NET, trao đổi dữ liệu chính phủ và tài chính.
XML dài dòng hơn JSON hay YAML, nhưng khả năng xác thực schema của nó làm cho nó vô giá trong các ngữ cảnh mà tính toàn vẹn dữ liệu và hợp đồng chính thức giữa các hệ thống là quan trọng.
So sánh song song
| Tính năng | JSON | YAML | CSV | XML |
|---|---|---|---|---|
| Dễ đọc | Tốt | Xuất sắc | Tốt (dạng bảng) | Khá |
| Độ dài dòng | Thấp | Thấp | Rất thấp | Cao |
| Bình luận | Không | Có | Không | Có |
| Dữ liệu lồng nhau | Có | Có | Không | Có |
| Kiểu dữ liệu | Cơ bản | Phong phú | Không (tất cả là chuỗi) | Qua schema |
| Xác thực schema | JSON Schema | Không có chuẩn | Không | XSD |
| Kích thước tệp | Nhỏ | Nhỏ | Nhỏ nhất | Lớn |
| Tốc độ phân tích | Nhanh | Trung bình | Nhanh | Trung bình |
| Lĩnh vực chính | Web API | Cấu hình DevOps | Dữ liệu/bảng tính | Doanh nghiệp |
Khi nào dùng cái nào
- Chọn JSON khi xây dựng web API, lưu cấu hình cho dự án JavaScript/TypeScript, hoặc trao đổi dữ liệu giữa các dịch vụ. Đây là lựa chọn mặc định cho hầu hết các ứng dụng hiện đại.
- Chọn YAML khi viết tệp cấu hình mà con người sẽ đọc và chỉnh sửa thường xuyên. Tính dễ đọc và hỗ trợ bình luận làm cho nó lý tưởng cho DevOps và infrastructure-as-code.
- Chọn CSV khi làm việc với dữ liệu dạng bảng, nhập/xuất từ bảng tính hoặc cơ sở dữ liệu, hoặc khi kích thước tệp phải tối thiểu. Tránh dùng cho bất kỳ thứ gì phân cấp.
- Chọn XML khi làm việc với hệ thống doanh nghiệp, SOAP API, hoặc các ngữ cảnh yêu cầu xác thực schema chính thức. Nó cũng là lựa chọn đúng khi bạn cần đánh dấu hướng tài liệu (như SVG hoặc RSS).
Chuyển đổi giữa các định dạng
Chuyển đổi giữa các định dạng này là tác vụ phổ biến. Một số điều cần lưu ý:
- JSON sang YAML (và ngược lại) thường không mất dữ liệu vì YAML là tập cha của JSON.
- CSV sang JSON/YAML hoạt động tốt cho dữ liệu phẳng nhưng cần quyết định về cấu trúc cho đầu ra lồng nhau.
- XML sang JSON có thể mất thông tin (thuộc tính, namespace, thứ tự) vì JSON không có các khái niệm tương đương.
- Bất kỳ định dạng nào sang CSV chỉ hoạt động nếu dữ liệu phẳng hoặc có thể được làm phẳng có ý nghĩa.
Mẹo. Khi chuyển đổi giữa các định dạng, luôn xác minh đầu ra. Chuyển đổi tự động có thể mất dữ liệu âm thầm, đặc biệt với thuộc tính XML, ép kiểu YAML, hoặc các trường hợp mã hóa đặc biệt của CSV.
Tìm hiểu thêm
ToolK.io cung cấp các công cụ miễn phí để chuyển đổi giữa JSON, YAML, CSV và XML, định dạng và xác thực dữ liệu của bạn, và khám phá các hướng dẫn liên quan để làm việc với dữ liệu có cấu trúc trong dự án của bạn.
