Chuyển đổi JSON ↔ YAML ↔ TOML
Chuyển qua lại giữa JSON, YAML và TOML với tự nhận diện định dạng
Về công cụ này
Chuyển đổi giữa JSON, YAML và TOML theo mọi chiều. Định dạng nguồn được tự nhận diện ngay khi bạn dán — dấu ngoặc gợi ý JSON, kiểu key: gợi ý YAML, [bảng] gợi ý TOML — và bạn vẫn có thể chọn tay khi dữ liệu mập mờ. Việc chuyển đổi đi qua một lần phân tích thật sự, nên kết quả chắc chắn hợp lệ chứ không phải phép biến đổi văn bản theo từng dòng.
Mỗi định dạng có thế mạnh riêng: JSON cho API và trao đổi giữa máy với máy, YAML cho cấu hình do người biên tập (Kubernetes, pipeline CI), TOML cho các tệp cấu hình có kiểu rõ ràng (Cargo, pyproject). Chuyển dữ liệu qua lại bằng tay rất dễ sai thụt lề và dấu nháy, còn phép chuyển đổi này thì dẹp hẳn chuyện đó.
Công cụ nói thẳng về giới hạn của từng định dạng: TOML không có mảng ở cấp cao nhất và không có null, nên khi chuyển những tài liệu như vậy nó sẽ báo lý do thay vì âm thầm làm rơi dữ liệu.
Câu hỏi thường gặp
- Chú thích có còn lại sau khi chuyển đổi không?
- Không — JSON không có cú pháp chú thích, và phép chuyển đổi đi qua cấu trúc dữ liệu đã phân tích, vốn không mang theo chú thích. Chuyển YAML → JSON → YAML sẽ mất chú thích vĩnh viễn; khi chú thích quan trọng, hãy giữ lại tệp gốc.
- Vì sao chữ “no” trong YAML của tôi biến thành false?
- YAML 1.1 coi yes/no/on/off là giá trị luận lý, và mã quốc gia NO nổi tiếng là bị biến thành false. Bộ phân tích ở đây theo YAML 1.2 (chỉ true/false), nhưng những tệp viết cho bộ phân tích cũ vẫn có thể gây bất ngờ. Hãy đặt trong dấu nháy những chuỗi trông giống giá trị luận lý, số hay ngày tháng.
- Vì sao JSON của tôi không chuyển được sang TOML?
- TOML đòi hỏi cấp cao nhất phải là một bảng (đối tượng) — mảng hay giá trị vô hướng trần không thể là một tài liệu TOML — và nó không có null. Hãy tổ chức lại dữ liệu (bọc mảng vào trong một khóa, bỏ hoặc gán mặc định cho các giá trị null) rồi nó sẽ chuyển được.
- YAML có phải là tập cha của JSON không?
- Trên thực tế thì gần như đúng — YAML 1.2 phân tích được hầu hết mọi tài liệu JSON, đó là lý do dán JSON vào một tệp cấu hình YAML thường vẫn chạy. Chiều ngược lại thì không: các neo (anchor), chuỗi nhiều dòng và thẻ tag của YAML không có thứ tương đương trong JSON, nên khi chuyển đổi chúng sẽ bị khai triển hoặc biến thành chuỗi.