Chuyển đổi JSON sang YAML và YAML sang JSON trong trình duyệt
JSON và YAML mô tả cùng loại dữ liệu — các map lồng nhau, danh sách, chuỗi, số và boolean — nhưng trông rất khác nhau và được dùng ở những nơi khác nhau. Nếu bạn làm việc gần với API, tệp container hoặc pipeline CI, cuối cùng bạn sẽ cần chuyển đổi một sang cái kia. Trang này thực hiện chuyển đổi đó theo cả hai hướng, hoàn toàn trong trình duyệt của bạn, vì vậy dữ liệu bạn dán vào không bao giờ rời khỏi máy của bạn.

JSON là gì và nó sống ở đâu
JSON (JavaScript Object Notation) là định dạng dấu ngoặc-và-móc chặt chẽ được xây dựng cho máy móc trước tiên. Mỗi đối tượng được bao trong {}, mỗi mảng trong [], các khóa và giá trị chuỗi được đặt trong dấu ngoặc kép, và các mục được phân cách bằng dấu phẩy. Đây là định dạng truyền dữ liệu mặc định cho REST và GraphQL API, phần thân của hầu hết webhook, hình dạng của tài liệu NoSQL, và thứ mà lệnh fetch của bạn trả về. Hầu hết mọi ngôn ngữ đều phân tích nó ngay từ đầu, đó chính xác là lý do tại sao nó thắng ở lớp API: JSON.parse trong JavaScript, thư viện json trong Python và tương đương ở mọi nơi khác. Sự đánh đổi là JSON rườm rà khi viết tay và cấm chú thích, vì vậy đây là định dạng kém cho các tệp mà con người chỉnh sửa cả ngày.
YAML là gì và nó sống ở đâu
YAML (YAML Ain't Markup Language) được thiết kế cho ưu tiên ngược lại: con người trước tiên. Nó bỏ dấu ngoặc và dấu trích dẫn, dùng thụt lề để biểu thị lồng nhau, và cho phép bạn viết chú thích bằng #. Tính dễ đọc đó là lý do tại sao nó trở thành lingua franca của cấu hình. Tệp Docker Compose, Kubernetes manifest, workflow GitHub Actions và GitLab CI, Ansible playbook, và vô số tệp cấu hình ứng dụng đều là YAML. Tài liệu YAML điển hình ngắn hơn đáng kể so với JSON tương đương và dễ diff trong pull request hơn nhiều. Cái giá của sự thanh lịch đó là tính dễ vỡ, đó là nơi chuyển đổi trở nên thú vị.
Những khác biệt chính quan trọng
Ba khác biệt thúc đẩy hầu hết mọi quyết định chuyển đổi. Thứ nhất, khoảng trắng có ý nghĩa trong YAML và vô nghĩa trong JSON. YAML dùng khoảng trắng — không bao giờ là tab — để biểu thị cấu trúc, vì vậy một khoảng trắng lệch duy nhất có thể âm thầm thay đổi ý nghĩa của tài liệu. JSON không quan tâm đến thụt lề chút nào. Thứ hai, YAML hỗ trợ chú thích còn JSON thì không. Bất kỳ chú thích # nào trong YAML sẽ biến mất khi bạn tạo ra JSON, vì không có chỗ để đặt nó. Thứ ba, YAML có kiểu dữ liệu phong phú hơn, ngầm định hơn. Nó vui vẻ đọc ngày, timestamp và null theo nhiều cách đánh vần, và đoán kiểu từ các giá trị không được trích dẫn. JSON có một tập kiểu nhỏ, rõ ràng và không có sự mơ hồ. Cũng lưu ý rằng JSON về mặt kỹ thuật là tập con của YAML 1.2, đó là lý do tại sao JSON hợp lệ thường phân tích sạch như YAML, nhưng điều ngược lại không được đảm bảo.

Những lưu ý chuyển đổi cần chú ý
Vòng khứ hồi không phải lúc nào cũng không mất mát, và nên biết những điểm gãy:
- Vấn đề Na Uy. Theo quy tắc YAML 1.1,
NOkhông được trích dẫn phân tích như booleanfalse, vàyes,onvàoffcũng trở thành boolean. Mã quốc gia hoặc nhãn công tắc có thể đổi thànhtrue/falsetrước khi bạn nhận ra. Hãy trích dẫn các giá trị bạn muốn là chuỗi. - Ép kiểu số. Phiên bản như
3.10có thể mất số không ở cuối và trở thành3.1, và1.0trở thành số ngay cả khi bạn muốn văn bản. Hãy trích dẫn các chuỗi phiên bản và ID. - Anchor và alias biến mất. Tham chiếu
&anchorvà*aliascủa YAML không có tương đương JSON. Công cụ chuyển đổi tốt mở rộng chúng thành giá trị đầy đủ, vì vậy dữ liệu đúng nhưng sự trùng lặp mất đi — JSON sang YAML sang JSON sẽ không tái tạo các anchor gốc. - Chú thích và block scalar. Chú thích bị bỏ khi chuyển sang JSON. Block scalar nhiều dòng (
|và>) thu gọn thành chuỗi JSON thông thường với các escape\n, vì vậy ý định định dạng trực quan bị mất. - Thụt lề khi quay lại YAML. JSON không mã hóa thụt lề, vì vậy công cụ chuyển đổi chọn một phong cách nhất quán. Hãy xem lại trước khi dán vào công cụ nhạy cảm với tab.
Tại sao chỉ cục bộ quan trọng
Các tệp cấu hình và payload API chính xác là loại thứ không nên được tải lên máy chủ ngẫu nhiên: chúng thường mang tên máy chủ, token, tên dịch vụ nội bộ, hoặc dữ liệu khách hàng. Công cụ chuyển đổi này chạy bước phân tích và tạo ra trong trình duyệt của bạn bằng JavaScript. Không có gì được gửi đến backend, không có gì được ghi nhật ký, và công cụ hoạt động ngoại tuyến sau khi trang đã tải. Dán Kubernetes secret hoặc workflow CI với sự tự tin rằng nó ở lại trên máy của bạn.
Cần công cụ liên quan? Xem toàn bộ bộ bộ chuyển đổi dữ liệu, dọn dẹp đầu vào lộn xộn bằng công cụ định dạng JSON, và quay lại đây bất cứ khi nào bạn cần chuyển giữa thế giới API và thế giới cấu hình.
Câu hỏi thường gặp
Dữ liệu của tôi có được tải lên bất cứ đâu không?
Không. Quá trình chuyển đổi diễn ra hoàn toàn trong trình duyệt của bạn sử dụng JavaScript cục bộ. JSON hoặc YAML của bạn không bao giờ được gửi đến máy chủ, vì vậy các secret và tệp cấu hình vẫn riêng tư.
Tại sao giá trị YAML true hoặc false của tôi thay đổi bất ngờ?
YAML 1.1 coi các từ không được trích dẫn như yes, no, on và off là boolean — vấn đề Na Uy. Bao bất kỳ giá trị nào bạn muốn là chuỗi trong dấu ngoặc kép để nó tồn tại qua quá trình chuyển đổi dưới dạng văn bản.
Điều gì xảy ra với chú thích của tôi khi tôi chuyển YAML sang JSON?
JSON không có cú pháp chú thích, vì vậy tất cả chú thích hash bị loại bỏ trong quá trình chuyển đổi. Nếu bạn cần bảo toàn ghi chú, hãy giữ bản sao ủy quyền của bạn trong YAML.
Anchor và alias YAML có được bảo toàn không?
Chúng được mở rộng thành giá trị đầy đủ vì JSON không có cơ chế tham chiếu. Dữ liệu vẫn đúng, nhưng sự trùng lặp không thể khôi phục khi bạn chuyển đổi trở lại YAML.
Tôi có thể chuyển JSON sang YAML cũng như YAML sang JSON không?
Có, công cụ hoạt động theo cả hai hướng. Dán JSON để nhận YAML, hoặc dán YAML để nhận JSON, và công cụ phát hiện và tạo ra định dạng kia.
Tại sao YAML bị hỏng khi tôi dùng tab?
YAML yêu cầu khoảng trắng để thụt lề và từ chối tab. Nếu một lần dán không phân tích được, hãy thay thế ký tự tab bằng khoảng trắng và giữ thụt lề nhất quán.
