Initializing, please wait a moment

JSON vs YAML vs TOML, Giải Thích

Lần rà soát cuối 2026-04-27. Mở JSON parser hoặc JSON to CSV cho công việc JSON trong trình duyệt.

Câu trả lời 30 giây. JSON dành cho máy - cú pháp nghiêm ngặt, dễ phân tích, khó đọc. YAML dành cho con người - khoảng trắng có ý nghĩa, hỗ trợ anchor và reference, dễ gặp lỗi phân tích tinh tế. TOML là trung gian - sạch sẽ cho cấu hình nông, vụng về cho lồng sâu. Chọn theo người sửa tệp và độ phức tạp của dữ liệu.

Ba định dạng bên cạnh nhau

Cùng cấu hình, ba cách:

JSON                        YAML                  TOML
{                           server:               [server]
  "server": {                 host: "localhost"   host = "localhost"
    "host": "localhost",      port: 8080          port = 8080
    "port": 8080
  }
}                                                 

JSON - nghiêm ngặt và rõ ràng

Mục tiêu thiết kế của JSON là một định dạng mà mọi ngôn ngữ đều có thể phân tích y hệt nhau. Ngữ pháp nhỏ (sáu loại dữ liệu, quy tắc khoảng trắng rõ ràng). Mọi parser đều tạo ra cây giống nhau. Tính đồng nhất đó là lý do JSON thống trị API, tệp cấu hình cho công cụ đi kèm với parser JSON, và serialize giữa máy với máy.

Chỗ JSON vụng về: không cho phép comment, dấu phẩy cuối là lỗi cú pháp, và cấu hình lồng sâu trở nên khó đọc với con người. Khắc phục là JSON5 (JSON có comment và dấu phẩy cuối) cho cấu hình con người sửa, trong khi giữ JSON nguyên chất cho vận chuyển.

YAML - dễ đọc, đôi khi quá khôn

YAML đọc như ghi chú phác thảo. Thụt lề tạo cấu trúc; danh sách dùng gạch nối; giá trị không cần dấu ngoặc. Các trường ngắn và tệp dày đặc. Đó là lý do YAML thống trị Kubernetes, GitHub Actions, Docker Compose, và cấu hình CI - những nơi con người sửa tệp hàng ngày.

Chỗ YAML đau: khoảng trắng có ý nghĩa và tab phá vỡ parser. Chuỗi "yes" phân tích thành boolean true. Mã quốc gia Na Uy "NO" phân tích thành false. Số có số 0 đầu phân tích thành hệ cơ số 8. Chuỗi nhiều dòng có bốn cú pháp khác nhau. Định dạng để con người đọc nhưng không an toàn cho con người; lỗi phân tích tinh tế thường gặp trong sản xuất. Khắc phục là lint mọi tệp YAML trong CI và đặt dấu ngoặc quanh bất cứ chuỗi nào có thể bị hiểu sai.

TOML - đơn giản, nông

TOML nhắm vào ngách tệp cấu hình nơi YAML quá lòng thòng và JSON quá dài dòng. Phần trong ngoặc vuông, cặp khóa-giá trị với dấu bằng, kiểu ngày và giờ nguyên bản. Cargo (trình quản lý gói của Rust), pyproject.toml trong Python hiện đại, và nhiều công cụ cấu hình dùng nó.

Chỗ TOML vụng về: dữ liệu lồng sâu. Cú pháp cho mảng bảng verbose và không trực quan. Để lồng hơn 2-3 cấp, YAML hoặc JSON đọc tốt hơn. TOML thắng khi cấu hình tự nhiên phẳng - một danh sách phụ thuộc, một danh sách cài đặt build, một tập nhỏ các phần được đặt tên.

Quy tắc quyết định

Máy với máy: JSON. Cấu hình con người sửa hàng ngày, cấu trúc chủ yếu phẳng: TOML. Cấu hình con người sửa hàng ngày, cấu trúc lồng sâu: YAML, với linting trong CI. Khi nghi ngờ, JSON - sự nghiêm ngặt là bảo hiểm rẻ.

Để chuyển đổi giữa các định dạng, xem JSON to CSV hoặc JSON parser. Cho công cụ lập trình khác, trung tâm công cụ phát triển.

Để kiểm tra JSON thực tế trong trình duyệt, xem JSON parser: validate vs format vs tree view - giải thích khi nào mỗi hành động của JSON parser có ý nghĩa. Để so sánh JSON formatter trực tuyến với các công cụ khác, xem JSON formatter vs alternatives.