Chuyển đổi YAML ⇄ JSON

YAML sang JSON và ngược lại, kiểm tra YAML kèm số dòng và cảnh báo YAML 1.1.

Chuyển đổi

Hợp lệ · 1 tài liệu

  • Dòng 8: NO là chuỗi trong YAML 1.2 nhưng là boolean với bộ đọc YAML 1.1 (PyYAML, Ruby cũ). Hãy đặt trong nháy cho chắc.
  • Dòng 9: 0644 có số 0 đứng đầu. YAML 1.2 đọc nó là số thập phân, YAML 1.1 là số bát phân. Hãy viết 0o… hoặc đặt trong nháy.

Công cụ này làm gì

Ba việc trong một: YAML sang JSON, JSON sang YAML, và định dạng YAML, tức đọc tệp rồi viết lại theo một kiểu thống nhất. Mỗi lần chuyển cũng là một lần kiểm tra: lỗi YAML được báo kèm dòng, cột và nút đưa con trỏ tới đúng chỗ. Bộ phân tích được viết riêng cho trang này và chạy trong trình duyệt, nên tệp cấu hình có mật khẩu bên trong không rời khỏi máy bạn.

Hiểu được những gì

Phần YAML 1.2 thông dụng trong tệp cấu hình: ánh xạ và danh sách lồng nhau (kể cả kiểu - key: value và danh sách viết cùng mức thụt lề với khóa), [a, b] và {a: 1} viết trên một dòng, chuỗi thường, 'nháy đơn' và "nháy kép" với mọi chuỗi thoát, khối | và > cùng chỉ báo -, +, neo (&tên), bí danh (*tên), khóa gộp <<, các thẻ chuẩn (!!str, !!int...) và nhiều tài liệu ngăn bởi --- (thành một mảng JSON).

Không hỗ trợ và được báo lỗi thay vì đoán: khóa phức (? key), thẻ tùy biến như !Ref của CloudFormation, chỉ thị %TAG. Chú thích bị bỏ, vì JSON không có chú thích. Bộ phân tích theo lược đồ lõi YAML 1.2 và được kiểm tra với các ví dụ ở chương 2 của đặc tả YAML 1.2.2 cùng một thư viện YAML độc lập.

Những bẫy YAML 1.1 được cảnh báo

Nhiều công cụ vẫn đọc YAML theo luật 1.1 (PyYAML, thư viện Ruby và Go cũ, một số hệ thống CI):

  • `NO`, `yes`, `on`, `off` là chuỗi trong YAML 1.2 nhưng là boolean trong 1.1. Danh sách mã quốc gia có Na Uy biến thành false ("vấn đề Na Uy").
  • `0755` là số thập phân 755 trong 1.2 nhưng là số bát phân 493 trong 1.1, nạn nhân điển hình là quyền tệp.
  • `1:20` từng là số hệ 60 (80) trong 1.1, nay là chuỗi.

Công cụ cảnh báo kèm số dòng, và khi chuyển JSON sang YAML luôn đặt những chuỗi như vậy trong nháy ("NO", "0755", "12:30") để mọi bộ đọc hiểu giống nhau.

Chuyển đổi an toàn

Thứ tự khóa được giữ nguyên, số 20 chữ số không bị làm tròn; .inf và .nan không có dạng JSON nên thành null kèm ghi chú. Tab không được dùng để thụt lề trong YAML, đây là lỗi hay gặp nhất sau khi sao chép. Tài liệu bung bí danh quá lớn (tấn công "billion laughs") bị dừng thay vì làm treo tab. Đọc thêm các bẫy YAML và cách chuyển đổi an toàn, hoặc kiểm tra phía JSON bằng công cụ định dạng JSON.

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

Vì sao mã quốc gia NO thành false?

Trong YAML 1.1, NO, yes, on, off là boolean. YAML 1.2 đã bỏ quy tắc đó nhưng nhiều bộ đọc vẫn dùng 1.1. Công cụ này đọc theo 1.2 nên NO vẫn là chuỗi, và cảnh báo vì công cụ khác có thể đọc khác. Viết 'NO' trong nháy để an toàn ở mọi nơi.

Vì sao dấu tab trong YAML bị báo lỗi?

Đặc tả YAML cấm dùng tab để thụt lề vì độ rộng của tab không rõ ràng. Hãy thay bằng dấu cách. Tab bên trong giá trị hoặc sau dấu hai chấm thì vẫn được.

Chú thích đi đâu?

Bị bỏ đi. JSON không có chú thích, và khi định dạng YAML công cụ dựng lại tệp từ dữ liệu, nên chú thích không được giữ. Hãy giữ bản gốc nếu chú thích quan trọng.

Có hỗ trợ neo và khóa gộp << không?

Có. Bí danh được thay bằng bản sao của giá trị được neo, còn << chép các khóa chưa có từ một hay nhiều ánh xạ. Khóa viết tường minh luôn được ưu tiên.