tigtools

Công cụ chuyển đổi JSON ⇄ YAML

Chọn chiều chuyển đổi, dán dữ liệu và nhận kết quả ngay lập tức. Hữu ích cho manifest Kubernetes, pipeline CI và cấu hình ứng dụng.

Chạy ngay trên trình duyệt Không cần đăng ký

Chiều chuyển đổi
Thụt lề

Cách sử dụng

  1. Chọn chiều chuyển đổi: JSON → YAML hoặc YAML → JSON.
  2. Dán dữ liệu hoặc nhấn “Thử ví dụ”. Kết quả sẽ cập nhật khi bạn nhập.
  3. Chọn thụt lề 2 hoặc 4 dấu cách cho kết quả.
  4. Sao chép hoặc tải kết quả xuống. “Dùng kết quả làm đầu vào” sẽ đảo chiều chuyển đổi để bạn có thể chuyển ngược lại.

Cách hoạt động

Quá trình chuyển đổi sử dụng thư viện yaml mã nguồn mở (phiên bản 2), triển khai đặc tả YAML 1.2. Trên thực tế, YAML 1.2 là tập hợp siêu của JSON, vì vậy mọi tài liệu JSON đều có thể chuyển sang YAML mà không mất dữ liệu; YAML chỉ dùng map, danh sách, chuỗi, số, giá trị boolean và null cũng sẽ chuyển ngược lại thành JSON giống hệt.

Khi tạo YAML, công cụ đặt dấu ngoặc kép cho những chuỗi có thể bị hiểu nhầm thành kiểu dữ liệu khác. Các trình phân tích YAML 1.1 cũ hơn, chẳng hạn PyYAML và nhiều công cụ CI, đọc yes, no, on và off thành giá trị boolean, 0777 thành số bát phân và 2024-01-31 thành ngày tháng. Vì vậy, các giá trị này được ghi thành "yes", "0777" và "2024-01-31". Chuỗi dài không được ngắt thành nhiều dòng. Không thể giữ lại chú thích vì JSON không hỗ trợ chú thích.

Khi đọc YAML, các anchor (&name) và alias (*name) được mở rộng, bao gồm cả khóa hợp nhất <<. Tệp có nhiều tài liệu ngăn cách bằng --- sẽ trở thành một mảng JSON. Để bảo vệ trình duyệt, số lần mở rộng alias được giới hạn nhằm ngăn các tài liệu kiểu “billion laughs”. Các giá trị YAML không có kiểu tương đương trong JSON được chuyển đổi gần nhất có thể: .inf và .nan trở thành null, còn dấu thời gian được giữ dưới dạng chuỗi. Lỗi cú pháp được báo kèm số dòng và cột.

Ví dụ

Manifest Kubernetes

Một Deployment được viết bằng JSON bởi tập lệnh sẽ chuyển sang bố cục YAML mà người dùng kubectl mong đợi, trong đó danh sách dưới containers được ghi theo dạng - name: web. Các giá trị như "no" vẫn được đặt trong dấu ngoặc kép để giữ nguyên kiểu chuỗi.

Cấu hình CI có anchor

Tệp pipeline định nghĩa giá trị mặc định bằng : &defaults và dùng lại chúng với <<: *defaults. Chuyển sang JSON sẽ cho thấy chính xác mỗi job có những khóa nào sau khi hợp nhất.

Đặc tả OpenAPI

Tệp OpenAPI được duy trì dưới dạng YAML, nhưng trình tạo mã cần JSON. Dán YAML, chọn thụt lề 2 dấu cách rồi tải tệp .json xuống.

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

Tại sao "yes" trong YAML của tôi lại được đặt trong dấu ngoặc kép?

Theo quy tắc YAML 1.1, hiện vẫn được PyYAML, Ansible và nhiều công cụ khác sử dụng, yes, no, on hoặc off không có dấu ngoặc kép sẽ được hiểu là giá trị boolean. Đặt trong dấu ngoặc kép sẽ giữ chúng ở dạng chuỗi trong mọi trình phân tích. Dấu ngoặc kép không thuộc về giá trị.

Chú thích YAML có được giữ lại khi chuyển sang JSON không?

Không. JSON không có cú pháp chú thích nên các chú thích sẽ bị loại bỏ. Chuyển JSON trở lại YAML cũng không khôi phục được chúng.

Điều gì xảy ra khi có nhiều tài liệu YAML được ngăn cách bằng ---?

Các tài liệu được chuyển thành một mảng JSON, mỗi tài liệu là một phần tử và giữ nguyên thứ tự. Nếu chỉ có một tài liệu, kết quả chuyển đổi sẽ là giá trị của tài liệu đó.

Còn các thẻ tùy chỉnh như !Ref của CloudFormation thì sao?

Các thẻ dành riêng cho ứng dụng không được nhận diện. Công cụ sẽ hiển thị cảnh báo và chuyển giá trị có thẻ thành giá trị thông thường. Vì vậy, !Ref MyBucket trở thành chuỗi "MyBucket" và thẻ sẽ bị mất.

Quyền riêng tư

Cả hai chiều chuyển đổi đều chạy hoàn toàn trong trình duyệt. JSON hoặc YAML của bạn không được tải lên, lưu trữ hay đưa vào dữ liệu phân tích.