JSON sang YAML

Chuyển đổi JSON sang định dạng YAML

Thử ví dụ

Đầu vào JSON

Đầu ra YAML

Chạy cục bộ · An toàn để dán thông tin bí mật
YAML sẽ hiển thị ở đây…

Chuyển đổi JSON sang YAML là gì?

Chuyển đổi JSON sang YAML biến đổi dữ liệu từ JavaScript Object Notation sang YAML Ain't Markup Language. Cả hai định dạng đều biểu diễn cùng một cấu trúc dữ liệu (đối tượng, mảng, chuỗi, số, boolean, null), nhưng sử dụng cú pháp khác nhau. JSON dùng dấu ngoặc nhọn, dấu ngoặc vuông và dấu phẩy. YAML dùng thụt lề và xuống dòng, tạo ra đầu ra gần với văn bản thường hơn. Khác với XML, cả hai định dạng đều không yêu cầu schema.

YAML được thiết kế như một định dạng tuần tự hóa dữ liệu thân thiện với con người. Đây là ngôn ngữ cấu hình mặc định cho Kubernetes manifests, Docker Compose files, Ansible playbooks, GitHub Actions workflows và nhiều hệ thống CI/CD khác. Khi dữ liệu nguồn ở dạng JSON nhưng hệ thống đích yêu cầu YAML, bạn cần một bộ chuyển đổi bảo toàn chính xác từng giá trị, kiểu dữ liệu và cấp độ lồng nhau mà không mất dữ liệu.

Chuyển đổi JSON sang YAML trực tuyến hữu ích khi bạn nhận phản hồi API hoặc dữ liệu xuất ở dạng JSON và cần dán vào file cấu hình YAML. Việc chuyển đổi không mất dữ liệu với mọi kiểu JSON chuẩn: chuỗi, số, boolean, null, mảng và đối tượng đều ánh xạ trực tiếp sang tương đương trong YAML. Các giá trị chứa dấu hai chấm hoặc ký tự đặc biệt sẽ được tự động đặt trong dấu ngoặc kép để đảm bảo đầu ra là YAML hợp lệ.

Tại sao cần chuyển đổi JSON sang YAML?

YAML là chuẩn cho file cấu hình; JSON là thứ API trả về. Chuyển đổi giữa hai định dạng cho phép bạn dùng đúng định dạng cho từng nhiệm vụ mà không cần viết lại dữ liệu thủ công.

Chuyển đổi tức thì
Dán JSON và nhận đầu ra YAML ngay lập tức. Không chờ xử lý trên server, không tải file lên, không giới hạn tốc độ.
🔒
Xử lý ưu tiên bảo mật
Dữ liệu của bạn không bao giờ rời khỏi trình duyệt. Quá trình chuyển đổi chạy hoàn toàn bằng JavaScript trên thiết bị của bạn, giữ thông tin xác thực, token và API key riêng tư.
🔀
Xử lý mọi cấu trúc JSON
Đối tượng lồng nhau sâu, mảng lớn, kiểu dữ liệu hỗn hợp, chuỗi Unicode và ký tự đặc biệt đều được chuyển đổi chính xác. Công cụ bảo toàn toàn bộ cấu trúc dữ liệu.
📋
Không cần tài khoản hay cài đặt
Mở trang và bắt đầu chuyển đổi ngay. Không đăng ký, không tiện ích mở rộng, không cần cài CLI. Hoạt động trên mọi thiết bị có trình duyệt.

Các trường hợp sử dụng JSON sang YAML

Kubernetes & Docker Compose
Phản hồi API và cấu hình xuất thường ở dạng JSON. Chuyển đổi chúng sang YAML để dùng trực tiếp trong Kubernetes manifests, Helm charts và Docker Compose files.
Cấu hình CI/CD Pipeline
GitHub Actions, GitLab CI, CircleCI và Azure Pipelines đều dùng YAML. Khi tạo cấu hình pipeline tự động từ JSON, hãy chuyển đổi đầu ra trước khi commit.
Ansible Playbooks
Ansible yêu cầu YAML cho playbooks và file inventory. Chuyển đổi dữ liệu inventory JSON xuất từ cloud APIs sang định dạng YAML mà Ansible cần.
Kiểm tra phản hồi API
REST APIs trả về JSON. Chuyển đổi phản hồi lồng nhau sang YAML giúp thấy rõ hệ thống phân cấp dữ liệu ngay, nhanh hơn nhiều so với đọc JSON đầy dấu ngoặc.
Di chuyển file cấu hình
Khi di chuyển ứng dụng từ cấu hình JSON (như tsconfig.json, package.json exports) sang công cụ dùng YAML, hãy chuyển đổi hàng loạt thay vì gõ lại từng giá trị.
Học tập & Tài liệu
Sinh viên và kỹ thuật viên tài liệu dùng JSON/YAML song song để hiểu cách ánh xạ cấu trúc dữ liệu giữa hai định dạng. Bộ chuyển đổi cung cấp ví dụ chính xác tức thì.

So sánh JSON và YAML

JSON và YAML có thể biểu diễn cùng một dữ liệu, nhưng cú pháp và tính năng của chúng khác nhau theo những cách quan trọng cho các trường hợp sử dụng cụ thể.

Tính năngJSONYAML
SyntaxCurly braces, square brackets, colons, commasIndentation-based, colons, dashes
ReadabilityModerate — nested brackets become denseHigh — visual hierarchy from indentation
CommentsNot allowed (RFC 8259)Supported with #
Multi-line stringsEscape sequences only (\n)Block scalars with | or >
Data typesstring, number, boolean, null, object, arraySame plus date, timestamp, binary
File sizeSlightly larger (brackets + quotes)Slightly smaller (no brackets)
Trailing commasNot allowedNot applicable (no commas)
SpecRFC 8259 / ECMA-404YAML 1.2 (yaml.org)

Những điểm dễ mắc lỗi trong YAML sau khi chuyển đổi

YAML có các quy tắc phân tích cú pháp khiến nhiều lập trình viên quen JSON bất ngờ. Bốn vấn đề sau gây ra nhiều lỗi nhất khi làm việc với đầu ra đã chuyển đổi.

yes/no không có dấu ngoặc trở thành Boolean
Bộ phân tích YAML 1.1 coi yes, no, on, off, true và false là giá trị boolean. Nếu JSON của bạn có giá trị chuỗi "yes" hoặc "no", đầu ra YAML có thể mất dấu ngoặc và bị phân tích thành boolean bởi các công cụ cũ. YAML 1.2 giới hạn điều này chỉ còn true/false.
Lỗi thụt lề gây lỗi phân tích
YAML dùng thụt lề để định nghĩa cấu trúc. Một khoảng trắng thừa hoặc thiếu có thể thay đổi ý nghĩa hoặc gây lỗi phân tích. Khác với JSON, nơi dấu phẩy sai vị trí cho thông báo lỗi rõ ràng, lỗi thụt lề YAML có thể âm thầm thay đổi cấu trúc dữ liệu.
Dấu hai chấm trong giá trị cần dấu ngoặc
Dấu hai chấm theo sau bởi dấu cách (": ") là ký hiệu phân tách key-value trong YAML. Nếu chuỗi JSON chứa chuỗi đó (ví dụ "http://example.com"), đầu ra YAML phải đặt giá trị trong dấu ngoặc. Hầu hết các bộ chuyển đổi xử lý điều này tự động.
File nhiều tài liệu
YAML hỗ trợ nhiều tài liệu trong một file, phân cách bằng ---. JSON không có tương đương. Khi chuyển đổi mảng JSON chứa các cấu hình, mỗi phần tử có thể trở thành một tài liệu YAML riêng hoặc giữ nguyên là phần tử mảng. Hãy biết định dạng nào mà công cụ đích mong đợi.

Ví dụ mã nguồn

Chuyển đổi JSON sang YAML theo lập trình đòi hỏi thư viện tuần tự hóa YAML trong hầu hết các ngôn ngữ. Thư viện chuẩn xử lý phân tích JSON; đầu ra YAML cần thêm một package.

JavaScript (Node.js)
import YAML from 'js-yaml'

const json = '{"host":"localhost","port":3000,"debug":true}'
const obj = JSON.parse(json)
const yamlStr = YAML.dump(obj, { indent: 2 })
console.log(yamlStr)
// → host: localhost
// → port: 3000
// → debug: true
Python
import json, yaml

json_str = '{"host": "localhost", "port": 3000, "debug": true}'
data = json.loads(json_str)
yaml_str = yaml.dump(data, default_flow_style=False, sort_keys=False)
print(yaml_str)
# → host: localhost
# → port: 3000
# → debug: true
Go
package main

import (
    "encoding/json"
    "fmt"
    "gopkg.in/yaml.v3"
)

func main() {
    jsonStr := `{"host":"localhost","port":3000,"debug":true}`
    var data map[string]interface{}
    json.Unmarshal([]byte(jsonStr), &data)

    yamlBytes, _ := yaml.Marshal(data)
    fmt.Println(string(yamlBytes))
    // → debug: true
    // → host: localhost
    // → port: 3000
}
CLI (yq / jq + Python)
# Using yq (https://github.com/mikefarah/yq)
echo '{"host":"localhost","port":3000}' | yq -P
# → host: localhost
# → port: 3000

# Using Python one-liner
echo '{"host":"localhost","port":3000}' | python3 -c "import sys,json,yaml; print(yaml.dump(json.load(sys.stdin), default_flow_style=False))"

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

Chuyển đổi JSON sang YAML có mất dữ liệu không?
Không, với mọi kiểu JSON chuẩn. Chuỗi, số, boolean, null, mảng và đối tượng đều có tương đương trực tiếp trong YAML. YAML đã chuyển đổi có thể được phân tích lại để tạo ra dữ liệu giống hệt. Điểm khác biệt duy nhất về hình thức là định dạng: YAML dùng thụt lề thay vì dấu ngoặc.
YAML có thể biểu diễn mọi thứ JSON có thể không?
Có. YAML là superset của JSON (kể từ YAML 1.2). Mọi tài liệu JSON hợp lệ cũng là YAML hợp lệ. YAML bổ sung các tính năng mà JSON thiếu: comment, anchors/aliases, chuỗi nhiều dòng và các kiểu scalar bổ sung như ngày tháng.
Tại sao Kubernetes và Docker dùng YAML thay vì JSON?
YAML hỗ trợ comment, điều quan trọng để ghi tài liệu cấu hình hạ tầng. YAML cũng dễ đọc hơn với các cấu trúc lồng nhau sâu vì thụt lề thay thế cho dấu ngoặc. Kubernetes thực sự chấp nhận cả JSON lẫn YAML, nhưng cộng đồng và toàn bộ tài liệu chính thức đều dùng YAML.
Làm thế nào để xử lý file JSON lớn?
Bộ chuyển đổi này chạy trong trình duyệt, vì vậy có thể xử lý các file lên đến vài megabyte mà không gặp vấn đề. Với file rất lớn (50MB+), hãy dùng công cụ CLI như yq hoặc script Python với thư viện PyYAML. Các công cụ này xử lý dữ liệu dạng luồng và dùng ít bộ nhớ hơn.
Bộ chuyển đổi có bảo toàn thứ tự key không?
Có. Bộ chuyển đổi xuất các key YAML theo đúng thứ tự chúng xuất hiện trong JSON đầu vào. Đối tượng JSON về mặt kỹ thuật không có thứ tự theo spec, nhưng thực tế các bộ phân tích bảo toàn thứ tự chèn, và công cụ này duy trì thứ tự đó trong đầu ra YAML.
Đầu ra tuân theo phiên bản YAML nào?
Đầu ra tuân theo quy ước YAML 1.2. Điều này có nghĩa chỉ true và false được coi là literal boolean (không phải yes/no/on/off). Các chuỗi có thể bị hiểu nhầm sẽ được tự động đặt trong dấu ngoặc để tránh nhập nhằng khi phân tích.
Có an toàn khi dán API key và token vào công cụ này không?
Có. Quá trình chuyển đổi chạy hoàn toàn trong trình duyệt bằng JavaScript. Không có dữ liệu nào được gửi lên server. Bạn có thể xác minh điều này bằng cách mở network inspector của trình duyệt và quan sát rằng không có yêu cầu nào được thực hiện trong quá trình chuyển đổi.