Bỏ qua đến nội dung chính
FreeOnlineTools Go
Tiếng Việt
So sánh

JSON vs YAML: Nên Chọn Định dạng Cấu hình Nào?

Bởi {author} · Đã cập nhật 2026-09-02

Trả lời nhanh

Dùng JSON cho API, trao đổi dữ liệu và trường hợp strict parsing&validation quan trọng. Dùng YAML cho tệp cấu hình, manifest DevOps và nơi khả năng đọc và comment quan trọng. YAML là superset JSON —mọi JSON hợp lệ là YAML hợp lệ.

Giới thiệu

JSON và YAML đều là định dạng serialization dữ liệu đọc được. JSON strict, tối thiểu và ubiquitous trong web API. YAML là superset của JSON thêm comment, multiline string, anchor và cấu trúc dựa indent —làm nó phổ biến cho tệp cấu hình (Docker Compose, Kubernetes, CI/CD).

Từng bước một

  1. So sánh cú pháp và khả năng đọc

    JSON sử dụng dấu ngoặc nhọn và dấu ngoặc kép: {"key": "value"}. YAML sử dụng thụt lề và dấu hai chấm: key: value. YAML dễ cấu hình hơn — không cần dấu ngoặc kép cho chuỗi, không có dấu phẩy giữa các mục, không có dấu ngoặc nhọn. JSON rõ ràng hơn và ít xảy ra lỗi hơn khi trao đổi dữ liệu.

  2. So sánh các tính năng

    YAML hỗ trợ: nhận xét (#), chuỗi nhiều dòng (|, >), neo (&) và bí danh (*), nhiều tài liệu trong một tệp (---) và các loại phức tạp. JSON không hỗ trợ những thứ này — không có nhận xét, không có chuỗi nhiều dòng, không có tài liệu tham khảo. Sự đơn giản của JSON là có chủ ý: đó là định dạng trao đổi dữ liệu, không phải ngôn ngữ cấu hình.

  3. So sánh sự an toàn và phân tích cú pháp

    Phân tích cú pháp JSON nhanh chóng và an toàn — JSON.parse được tích hợp vào mọi công cụ JavaScript. Phân tích cú pháp YAML chậm hơn và phức tạp hơn - thông số YAML là hơn 80 trang so với 2 trang của JSON. YAML có những rủi ro về bảo mật (tấn công hàng tỷ tiếng cười thông qua các neo) mà JSON không có. Luôn sử dụng trình phân tích cú pháp YAML an toàn để tắt tính năng neo.

  4. So sánh việc sử dụng hệ sinh thái

    JSON: REST APIs, pack.json, tsconfig.json, cơ sở dữ liệu NoSQL, ứng dụng web. YAML: Docker Compose, bảng kê khai Kubernetes, Tác vụ GitHub, Playbook Ansible, cấu hình CI/CD, thông số OpenAPI. JSON thống trị dữ liệu thời gian chạy; YAML thống trị cấu hình.

  5. Quyết định dựa trên trường hợp sử dụng của bạn

    APIs, trao đổi dữ liệu, NoSQL, trạng thái ứng dụng web: JSON. Tệp cấu hình, DevOps, CI/CD, cơ sở hạ tầng dưới dạng mã: YAML. Nếu con người viết nó bằng tay: YAML. Nếu máy tạo và tiêu thụ nó: JSON.

Ví dụ

Cấu hình tương tự trong JSON và YAML

đầu vào: JSON: {"server": {"port": 8080, "host": "localhost"}} YAML: server:\n port: 8080\n host: localhost

đầu ra: YAML ngắn hơn 30% và hỗ trợ nhận xét. JSON chặt chẽ hơn và có thể phân tích cú pháp trên toàn cầu.

Các vấn đề thường gặp

  • Lỗi thụt lề YAML: YAML sử dụng thụt lề cho cấu trúc và một dấu cách sai sẽ phá vỡ phân tích cú pháp - sử dụng trình chỉnh sửa có tính năng phân tích YAML và luôn sử dụng dấu cách, không bao giờ sử dụng tab.
  • Cuộc tấn công gây cười hàng tỷ tỷ YAML: Các neo và bí danh YAML có thể tạo ra sự mở rộng theo cấp số nhân, gây ra DoS - sử dụng trình phân tích cú pháp YAML an toàn để vô hiệu hóa các neo (ví dụ: yaml.safe_load trong Python).
  • JSON không có nhận xét nào: thông số JSON cấm nhận xét, khiến tệp cấu hình khó chú thích hơn — sử dụng YAML cho cấu hình do con người chỉnh sửa, JSON cho dữ liệu do máy tạo.
  • Những bất ngờ khi gõ ngầm YAML: YAML tự động chuyển đổi có/không thành boolean và 1.0 thành float, điều này có thể phá vỡ các trường chuỗi - trích dẫn các chuỗi một cách rõ ràng để tránh bị ép buộc kiểu không mong muốn.

Mẹo

  • Sử dụng YAML cho cấu hình do con người tạo ra (Docker Compose, Kubernetes, CI/CD) và JSON để trao đổi dữ liệu do máy tạo ra (APIs, NoSQL, trạng thái ứng dụng).
  • Luôn sử dụng trình phân tích cú pháp YAML an toàn để vô hiệu hóa các neo và bí danh - không bao giờ sử dụng trình tải YAML có mục đích chung trên đầu vào không đáng tin cậy.
  • Khi chuyển đổi YAML thành JSON, có thể sẽ mất nhận xét, chuỗi nhiều dòng và neo — JSON là tập hợp con của YAML, không phải ngược lại đối với các tính năng.
  • Thụt lề YAML với 2 khoảng trắng nhất quán - trộn lẫn các tab và dấu cách hoặc sử dụng thụt lề không nhất quán là lỗi phân tích cú pháp YAML phổ biến nhất.

Công cụ liên quan

Hướng dẫn liên quan

Tài liệu tham khảo