Chuyển Đổi YAML-JSON
Chuyển đổi YAML sang JSON và JSON sang YAML ngay lập tức. Công cụ trực tuyến miễn phí với tùy chọn định dạng. Xử lý dữ liệu an toàn.
Về Công Cụ Chuyển Đổi YAML-JSON
Công cụ Chuyển đổi YAML-JSON là công cụ trực tuyến miễn phí để chuyển đổi giữa định dạng YAML (YAML Ain't Markup Language) và JSON (JavaScript Object Notation). Tải tệp lên hoặc dán dữ liệu, tùy chỉnh tùy chọn định dạng và tải xuống tệp đã chuyển đổi—tất cả được xử lý cục bộ trong trình duyệt của bạn để đảm bảo quyền riêng tư hoàn toàn.
Tôi nên dùng JSON hay YAML cho dự án của mình?
Dùng JSON cho giao tiếp máy-với-máy và YAML cho cấu hình do người chỉnh sửa. JSON nghiêm ngặt, phân tích nhanh và chỉ có một cách viết hợp lệ cho bất kỳ tài liệu nào, khiến nó lý tưởng cho API, tệp log và trạng thái được tuần tự hóa. YAML là siêu tập nghiêm ngặt của JSON 1.2 (theo đặc tả YAML 1.2) thêm chú thích, chuỗi nhiều dòng không cần thoát, neo và alias để tránh lặp lại, và cú pháp dựa trên thụt lề ngắn gọn hơn nhiều — tất cả tuyệt vời cho manifest Kubernetes, workflow GitHub Actions và playbook Ansible nơi con người là tác giả chính. Tránh YAML khi bảo mật quan trọng với đầu vào không tin cậy (các tấn công lịch sử "Billion Laughs" và thực thi tag sống ở đó) và tránh JSON khi bạn muốn chú thích. Kiểu MIME chính thức của YAML được đăng ký trong RFC 9512 là application/yaml; JSON dùng application/json từ RFC 8259.
Tại sao giá trị YAML "1.23" của tôi trở thành số khi tôi muốn chuỗi?
Đây là cái bẫy YAML nổi tiếng nhất và cắn mọi operator Kubernetes ít nhất một lần. YAML 1.1 tự động phát hiện kiểu scalar từ cú pháp: 1.23 là float, 42 là int, true / yes / on là boolean, null và ~ là null. Vì vậy trường version: 1.10 lặng lẽ mất số 0 cuối và trở thành 1.1; trường country với NO trở thành boolean false; và số serial 0123 trở thành số nguyên octal 83. Để ép thành chuỗi, hoặc bao giá trị trong dấu ngoặc (version: "1.10") hoặc dùng tag kiểu rõ ràng (version: !!str 1.10). YAML 1.2 thu hẹp tập boolean ngầm chỉ còn true và false, nhưng hầu hết các bộ phân tích thực tế (PyYAML, JS yaml không có tùy chọn, Kubernetes) vẫn mặc định hành vi 1.1. Luôn bao trong dấu ngoặc các giá trị chuỗi có thể trông giống số, boolean hoặc null.
Neo và alias hoạt động thế nào trong YAML — và JSON có tương đương không?
Neo YAML (&tên) bắt một nút và alias (*tên) tái sử dụng nó, cho phép bạn viết giá trị một lần và tham chiếu nó ở nơi khác trong cùng tài liệu. Khóa hợp nhất << cũng cho phép mix-in một mapping. JSON không có tương đương — mỗi giá trị phải được viết đầy đủ — nên khi bộ chuyển đổi này đi từ YAML sang JSON, nó phải vật chất hóa (mở rộng) mỗi alias thành một bản sao riêng của dữ liệu, có thể làm tăng kích thước tài liệu phụ thuộc nhiều vào aliasing. Đi theo hướng ngược lại, từ JSON sang YAML, bộ chuyển đổi này tùy chọn giới thiệu lại neo cho các nút xuất hiện giống hệt nhiều lần nếu bạn bật tùy chọn "compact các cây con giống nhau". Neo cũng là vector cho tấn công khét tiếng YAML "Billion Laughs", nên hầu hết thư viện YAML hiện đại giới hạn độ sâu alias và kích thước mở rộng theo mặc định.
Sự khác biệt giữa YAML 1.1, YAML 1.2 và YAML 1.2.2 là gì?
YAML 1.1 (2005) là phiên bản mà hầu hết các bộ phân tích legacy vẫn triển khai theo mặc định — bao gồm PyYAML, snakeyaml và stdlib Ruby. Nó cho phép các boolean yes/no/on/off/true/false ở bất kỳ casing nào, chấp nhận số octal qua zero đầu (0123 = 83) và phân tích ký hiệu khoa học một cách tích cực. YAML 1.2 (2009) căn chỉnh lại đặc tả để là siêu tập nghiêm ngặt của JSON, thu hẹp boolean chỉ còn true/false, loại bỏ quy tắc octal đầu zero (dùng 0o123 như JSON5) và làm chặt nhiều trường hợp biên. YAML 1.2.2 (2021) là phiên bản làm rõ của 1.2 không có thay đổi phá vỡ — hầu hết thư viện YAML JavaScript tuân thủ 1.2.2. Bộ chuyển đổi này nhắm tới YAML 1.2 theo mặc định. Nếu bạn duy trì playbook Ansible, manifest Kubernetes hoặc bất cứ thứ gì được tạo bởi công cụ Python, hãy mong đợi các đặc thù 1.1 và bao các scalar mơ hồ trong dấu ngoặc một cách phòng thủ.

Tôi có thể bao gồm chú thích khi chuyển YAML sang JSON không?
Nghiêm ngặt là không. RFC 8259 cấm chú thích trong JSON, và bất kỳ bộ phân tích JSON đáng dùng nào sẽ từ chối chúng như lỗi cú pháp. Chú thích YAML (# bất cứ gì) bị loại bỏ trong quá trình chuyển đổi và biến mất hoàn toàn khỏi JSON đầu ra. Nếu bảo toàn chú thích là quan trọng — chẳng hạn, bạn tạo JSON từ cấu hình YAML chỉnh sửa tay và muốn JSON vẫn có thể xem lại — viết các chú thích vào tệp riêng, hoặc chuyển định dạng đầu ra sang JSON5 (cho phép cả // và /* */ chú thích) hoặc JSONC (JSON với chú thích, được dùng rộng rãi bởi các tệp cấu hình VS Code). Đi theo hướng khác (JSON sang YAML), bộ chuyển đổi này không có chú thích nào để thêm vì nguồn không chứa nào, nhưng bạn có thể dán YAML kết quả vào editor và thêm chú thích tài liệu tự do.
Chuỗi nhiều dòng hoạt động thế nào và tôi nên chọn kiểu YAML nào?
YAML cung cấp hai kiểu scalar khối cho văn bản nhiều dòng. Khối nghĩa đen | bảo toàn mỗi xuống dòng chính xác — chọn nó cho đoạn mã, nghệ thuật ASCII hoặc bất cứ gì mà ngắt dòng có ngữ nghĩa. Khối gập > thu mỗi xuống dòng đơn thành khoảng trắng (coi các dòng liên tiếp là một đoạn) nhưng bảo toàn dấu phân cách dòng trống — chọn nó cho văn bản. Cả hai kiểu hỗ trợ chỉ báo chomping: |+ giữ tất cả xuống dòng cuối, |- bỏ tất cả xuống dòng cuối và | (không chỉ báo) giữ chính xác một xuống dòng cuối. JSON không có cú pháp nhiều dòng — mỗi xuống dòng trong giá trị phải được mã hóa thành \n — nên bộ chuyển đổi này mở rộng khối nghĩa đen YAML ba dòng thành một chuỗi JSON với hai ký tự \n. Cẩn thận với thụt lề: thụt lề nội dung khối bị bỏ khỏi mỗi dòng, nên các dòng lệch hàng tạo ra đầu ra răng cưa.
Làm sao stream-chuyển đổi tệp YAML đa tài liệu hoặc tài liệu JSON khổng lồ?
Một tệp YAML có thể chứa nhiều tài liệu phân tách bằng dấu --- (thường dùng trong manifest Kubernetes đóng gói nhiều tài nguyên). Bộ chuyển đổi này tải tất cả và tạo một mảng JSON các tài liệu ở đầu ra; ngược lại chuyển mảng JSON về luồng YAML đa tài liệu. Đối với tệp lớn hơn trình duyệt có thể giữ thoải mái (trên ~50 MB), dùng công cụ dòng lệnh: yq (jq cho YAML) xử lý cả hai hướng với yq -o=json input.yaml > out.json và yq -P input.json > out.yaml, trong khi các tài liệu JSON lớn stream qua jq, ijson (Python) hoặc JSONStream (Node). Kiểu MIME chính thức YAML theo RFC 9512 là application/yaml và cú pháp đa tài liệu là một phần của đặc tả YAML 1.2, nên hầu hết các bộ phân tích hiện đại xử lý dạng luồng tự nhiên mà không cần cờ đặc biệt nào.
Kiểu flow của YAML ({key: value, list: [1, 2]}) và kiểu block có tương đương không?
Có, giống hệt về ngữ nghĩa, nhưng rất khác về phong cách. Kiểu flow dùng dấu ngoặc nhọn và vuông kiểu JSON và vừa một dòng — hữu ích cho các đối tượng ngắn trong tài liệu lớn hơn. Kiểu block chỉ dùng thụt lề và là dạng YAML chuẩn cho mọi thứ nhiều dòng. Hầu hết công cụ (Helm, Kustomize, Ansible, GitHub Actions) thích kiểu block cho dễ đọc và để giữ diff tối thiểu. Bộ chuyển đổi này cho bạn chọn: ở đầu ra JSON-sang-YAML, chọn "ưu tiên block" (mặc định) hoặc "ưu tiên flow" hoặc "flow chỉ cho nguyên thủy". Một bẫy tinh tế: trong kiểu flow, các chuỗi chứa dấu phẩy, dấu hai chấm, dấu ngoặc vuông hoặc nhọn phải được bao trong dấu ngoặc vì các ký tự đó có cấu trúc; kiểu block khoan dung hơn. Khi nghi ngờ, chạy YAML qua yamllint để bắt các scalar không bao mơ hồ trước khi chúng cắn bạn trong sản xuất.
