Chuyển đổi JSON sang YAML

Dán mã JSON và nhận lại định dạng YAML sạch: có cách lồng dòng đúng hai khoảng trắng, các chuỗi chỉ được đặt trong ngoặc kép khi cần thiết, giá trị nhiều dòng được hiển thị dưới dạng các giá trị khối, và có thể tùy chọn sắp xếp các khóa theo thứ tự bảng chữ cái. Phương pháp này rất hữu ích để chuyển đổi các phản hồi từ API thành manifest của Kubernetes, cấu hình GitHub Actions hoặc bất kỳ công cụ nào hỗ trợ định dạng YAML.

Cách chuyển đổi JSON sang YAML

  1. 1

    Dán JSON

    Bất kỳ định dạng JSON hợp lệ nào cũng được chấp nhận. Bộ chuyển đổi giữ nguyên cấu trúc ngữ nghĩa một cách chính xác.

  2. 2

    Chọn phần lõm và kiểu văn bản

    2 hoặc 4 khoảng trắng; sử dụng kiểu dòng cho các mảng hoặc đối tượng nhỏ gọn, hoặc kiểu khối cho văn bản dài.

  3. 3

    Tùy chọn: các khóa sắp xếp

    Sắp xếp theo thứ tự bảng chữ cái giúp việc so sánh YAML giữa hai phiên bản trở nên dễ dàng hơn.

  4. 4

    Sao chép tệp YAML

    Dán vào tệp `.yaml`/`.yml` của bạn. Kết quả đầu ra là định dạng YAML 1.2 hợp lệ.

Ví dụ

Nội dung đầu vào:

{
  "name": "hyperion",
  "replicas": 3,
  "env": { "DEBUG": "false", "LOG_LEVEL": "info" },
  "command": ["php", "artisan", "queue:work"]
}

Kết quả đầu ra:

name: hyperion
replicas: 3
env:
  DEBUG: "false"
  LOG_LEVEL: info
command:
  - php
  - artisan
  - queue:work

Xác định kiểu dữ liệu

JSON YAML
chuỗi dạng không dấu ngoặc, có dấu ngoặc hoặc dạng số vô hướng khối tùy theo yêu cầu
số nguyên 42
số 3.14
boolean true / false
null null (hoặc ~, hoặc trống)
mảng chuỗi khối với mã - hoặc dòng [...]
đối tượng lập bản đồ khối bằng key: value hoặc dòng {...}

Khi các chuỗi cần được đặt trong dấu ngoặc kép

YAML tự động diễn giải một số chuỗi văn bản thành các giá trị không phải dạng chuỗi. Những giá trị có cấu trúc như vậy cần được đặt trong dấu ngoặc kép:

Giá trị Vì sao cần dùng dấu ngoặc kép
yes, no, on, off Được diễn giải dưới dạng giá trị boolean (tương thích với YAML 1.1)
null, Null, NULL Được hiểu là null
1.23 Được hiểu là một số
2026-04-18 Được hiểu là ngày
Khoảng trắng ở đầu/cuối Sẽ bị loại bỏ
Bắt đầu bằng *, &, ! Các chỉ thị YAML

Bộ chuyển đổi sẽ tự động đặt dấu ngoặc kép cho những phần này và để lại các phần còn lại không đặt dấu ngoặc nhằm tăng tính dễ đọc.

Sự khác biệt trong thiết kế giữa YAML và JSON

  • Bình luận: YAML hỗ trợ tính năng này (#), trong khi JSON không hỗ trợ.
  • Các tên liên kết/tên tham chiếu: YAML hỗ trợ tham chiếu chéo (ví dụ: &anchor/*alias); JSON lại hiển thị dữ liệu tương ứng. Hệ thống chuyển đổi không thể tự động suy luận được các thông tin này; bạn cần thêm chúng thủ công nếu cần.
  • Các chuỗi nhiều dòng: YAML sử dụng các giá trị tham số dạng khối (| giữ nguyên các dòng mới, trong khi > gộp chúng lại). Bộ chuyển đổi sử dụng những giá trị này để xử lý các chuỗi dài.
  • Biểu diễn giá trị null: YAML cho phép sử dụng các giá trị null, ~ hoặc giá trị trống. Bộ chuyển đổi sẽ tự động tạo giá trị null theo mặc định.

Các lỗi phổ biến

  • “Vấn đề Na Uy” của YAML 1.1. Trong YAML 1.1, NO không có dấu ngoặc kép được coi là giá trị boolean false. Hầu hết các trình phân tích hiện đại dùng YAML 1.2, nơi chỉ true/false là boolean, nhưng một số công cụ cũ vẫn có thể xử lý sai.
  • Khoảng trắng ở cuối các giá trị: YAML giữ nguyên khoảng trắng này trong các đại lượng khối (block scalars), nhưng sẽ loại bỏ nó trong các đại lượng đơn giản (plain scalars). Điều này có thể gây bất ngờ nếu bạn không biết giá trị đó được biểu diễn dưới dạng nào.
  • Các tab trong định dạng lồng nhau: YAML cấm sử dụng tab; hãy luôn dùng khoảng trắng thay thế.
  • Các chuỗi đơn dòng rất dài: Hãy chia chúng thành các giá trị số dạng khối để tăng tính dễ đọc; bộ chuyển đổi sẽ tự động thực hiện việc này khi độ dài vượt quá ngưỡng có thể cấu hình được.

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

Các chuỗi có dạng giống các loại YAML khác (giá trị boolean, số, ngày tháng, null) cần được đặt trong dấu ngoặc kép để giữ nguyên dạng chuỗi. Các chuỗi chứa ký tự đặc biệt (ký tự trắng ở đầu hoặc ký tự không thể in được) cũng cần được đặt trong dấu ngoặc. Bộ chuyển đổi sẽ tự động phát hiện và đặt dấu ngoặc ở những vị trí cần thiết.

Theo mặc định là YAML 1.2. Nếu bạn cần tính tương thích với YAML 1.1 (đối với các công cụ cũ hơn hoặc một số hệ thống CI), hãy bật tùy chọn “Tính tương thích với YAML 1.1”; bộ chuyển đổi sẽ thêm dấu ngoặc kép cho các giá trị thuộc loại boolean trong phiên bản trước 1.1 (yes, no, on, off).

Đúng vậy. Phong cách dòng ([1, 2, 3]{ a: 1 }) có sẵn cho các mảng và đối tượng nhỏ gọn. Hầu hết các tệp cấu hình đều ưu tiên sử dụng phong cách khối để tăng tính dễ đọc.

Đúng vậy, nhưng có một điểm cần lưu ý: định dạng YAML của K8s thường sử dụng các chú thích và điểm neo mà JSON không thể biểu diễn được. Hãy chuyển đổi cấu trúc dữ liệu trước khi thêm các chú thích hoặc điểm neo một cách thủ công.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác