NordVPN
SponsoredStrict no-logs VPN with 6,400+ servers in 111 countries. Threat Protection blocks ads, trackers, and malware while you work online.
Get NordVPN →Dán JSON vào bên trái để nhận YAML ở bên phải, hoặc ngược lại. Cả hai bảng đều có thể chỉnh sửa theo thời gian thực và tự động đồng bộ. Bao gồm các nút Định dạng JSON, Đổi chiều và Sao chép. Tất cả chuyển đổi chạy hoàn toàn trong trình duyệt, không gửi dữ liệu đến máy chủ.
JSON (JavaScript Object Notation) được Douglas Crockford giới thiệu vào đầu những năm 2000 như một định dạng trao đổi dữ liệu nhẹ dựa trên cú pháp đối tượng literal của JavaScript. Ngữ pháp nghiêm ngặt — dấu ngoặc kép, không có dấu phẩy cuối, không có chú thích — làm cho nó rõ ràng và dễ phân tích cú pháp trong bất kỳ ngôn ngữ nào. JSON nhanh chóng thay thế XML trong các API web nhờ sự ngắn gọn và khả năng tương thích tự nhiên với JavaScript.
YAML (YAML Ain't Markup Language) được tạo ra vào năm 2001 bởi Clark Evans và Ingy döt Net với mục tiêu thân thiện hơn với con người. YAML 1.2 về mặt kỹ thuật là superset của JSON — mọi tài liệu JSON hợp lệ đều là YAML hợp lệ — nhưng YAML thêm cấu trúc dựa trên thụt lề, chú thích, chuỗi nhiều dòng và suy luận kiểu, làm cho nó thoải mái hơn cho các file cấu hình được chỉnh sửa thủ công.
JSON xuất sắc khi máy móc đọc dữ liệu: REST API, bản ghi cơ sở dữ liệu, giao tiếp giữa các dịch vụ và localStorage. Sự đơn giản của nó có nghĩa là hầu hết mọi ngôn ngữ lập trình đều có trình phân tích JSON tích hợp sẵn, và các quy tắc cú pháp nghiêm ngặt loại bỏ sự mơ hồ.
YAML tỏa sáng trong các file cấu hình được con người chỉnh sửa: Docker Compose, manifests Kubernetes, workflows GitHub Actions và playbooks Ansible mặc định sử dụng YAML. Chú thích cho phép tài liệu nội tuyến, chuỗi nhiều dòng giữ cho các giá trị dài dễ đọc, và sự vắng mặt của dấu ngoặc nhọn làm cho cấu hình phân cấp ít lộn xộn hơn.
Độ nhạy thụt lề của YAML là nguồn lỗi phổ biến nhất. Không giống như dấu ngoặc nhọn JSON, một dấu cách đặt sai chỗ thay đổi cấu trúc. YAML cũng thực hiện suy luận kiểu tự động: yes không có dấu ngoặc kép chuyển thành boolean true, và 0755 có thể được phân tích cú pháp là số bát phân. Công cụ này đặt dấu ngoặc kép quanh các chuỗi có thể bị hiểu sai để bảo toàn kiểu gốc.
Các ký tự đặc biệt cũng là thách thức. Dấu hai chấm theo sau dấu cách (: ), dấu thăng (#) và các ký tự đặc biệt ở đầu chuỗi phải được đặt trong dấu ngoặc kép trong YAML. Công cụ này xử lý các trường hợp này tự động, nhưng các tính năng YAML nâng cao như neo, bí danh và scalar khối nhiều dòng nằm ngoài phạm vi và sẽ hiển thị thông báo lỗi rõ ràng.
Có. YAML 1.2 là superset nghiêm ngặt của JSON, nghĩa là mọi tài liệu JSON hợp lệ đều là YAML hợp lệ. Chiều ngược lại không phải lúc nào cũng đúng: các tính năng YAML như chú thích, neo và scalar khối không có tương đương trong JSON.
YAML phổ biến nhất trong các file cấu hình: Docker Compose (docker-compose.yml), manifests Kubernetes, GitHub Actions (.github/workflows), playbooks Ansible. Phong cách dễ đọc phù hợp với các file mà developer chỉnh sửa thủ công.
YAML thường thắng cho cấu hình được con người chỉnh sửa vì nó hỗ trợ chú thích và ít ồn ào hơn về mặt thị giác. JSON tốt hơn cho cấu hình được tạo ra hoặc tiêu thụ bởi máy móc. Nhiều công cụ (ESLint, Prettier, tsconfig) chấp nhận cả hai.
Chuỗi chứa dấu hai chấm theo sau dấu cách, các ký tự đặc biệt ở đầu ({, [, #) hoặc các giá trị trông giống boolean hoặc số phải được đặt trong dấu ngoặc kép. Dấu ngoặc đơn vô hiệu hóa tất cả escape; dấu ngoặc kép sử dụng escape dấu gạch chéo ngược tương tự JSON. Công cụ này tự động thêm dấu ngoặc kép khi cần thiết.
Đối với các kiểu mà JSON hỗ trợ (chuỗi, số, boolean, null, đối tượng, mảng), việc chuyển đổi không mất dữ liệu. Vấn đề tiềm ẩn duy nhất là suy luận kiểu của YAML trên các giá trị không có dấu ngoặc kép, đó là lý do tại sao công cụ này đặt dấu ngoặc kép quanh các chuỗi có thể bị hiểu sai.
Sử dụng thư viện PyYAML: import yaml, json; data = yaml.safe_load(open('file.yaml')); print(json.dumps(data, indent=2)). Hàm safe_load tránh thực thi các thẻ YAML tùy ý, điều này quan trọng cho bảo mật.
Với gói js-yaml: const yaml = require('js-yaml'); const obj = JSON.parse(fs.readFileSync('file.json')); console.log(yaml.dump(obj)). Với cách tiếp cận không phụ thuộc, hãy viết serializer YAML thủ công — đó là những gì công cụ này làm.
Công cụ này cố ý bỏ qua các tính năng YAML nâng cao: neo (&neo), bí danh (*bí danh), thẻ kiểu (!!int, !!str), scalar khối nhiều dòng (| và >), dấu phân cách tài liệu (---). Chúng bao gồm dưới 5% YAML thực tế. Đối với các trường hợp đó, hãy sử dụng thư viện YAML đầy đủ.
Strict no-logs VPN with 6,400+ servers in 111 countries. Threat Protection blocks ads, trackers, and malware while you work online.
Get NordVPN →Managed cloud hosting for WordPress and web apps on DigitalOcean, Vultr, and AWS. Fast setup, no server headaches.
Try Cloudways →Hire freelancers for design, writing, dev, and marketing — or sell your own services. Millions of gigs at every budget.
Browse Fiverr →