ToolDeck

مبدل JSON به YAML

تبدیل JSON به فرمت YAML

یک مثال امتحان کنید

ورودی JSON

خروجی YAML

به‌صورت محلی اجرا می‌شود · جای‌گذاری اسرار امن است
YAML اینجا نمایش داده می‌شود…

تبدیل JSON به YAML چیست؟

تبدیل JSON به YAML داده‌ها را از JavaScript Object Notation به YAML Ain't Markup Language منتقل می‌کند. هر دو فرمت ساختارهای داده‌ای یکسانی (اشیاء، آرایه‌ها، رشته‌ها، اعداد، بولین‌ها، null) را نمایش می‌دهند، اما نحو متفاوتی دارند. JSON به آکولاد، براکت و کاما متکی است. YAML از تورفتگی و خط جدید استفاده می‌کند و خروجی‌ای تولید می‌کند که به متن ساده نزدیک‌تر است. برخلاف XML، هیچ‌کدام از این فرمت‌ها نیازی به schema ندارند.

YAML به‌عنوان یک فرمت سریال‌سازی داده انسان‌پسند طراحی شده است. این فرمت، زبان پیش‌فرض پیکربندی برای Kubernetes manifests، Docker Compose، Ansible playbooks، GitHub Actions workflows و بسیاری از سیستم‌های CI/CD است. وقتی داده منبع شما JSON است و سیستم هدف YAML می‌خواهد، به مبدلی نیاز دارید که هر مقدار، نوع و سطح تودرتویی را بدون از دست رفتن داده حفظ کند.

تبدیل JSON به YAML آنلاین زمانی مفید است که پاسخ‌های API یا داده‌های صادرشده را به‌صورت JSON دریافت می‌کنید و باید آن‌ها را در یک فایل پیکربندی YAML قرار دهید. این تبدیل برای تمام انواع استاندارد JSON بدون اتلاف انجام می‌شود: رشته‌ها، اعداد، بولین‌ها، null، آرایه‌ها و اشیاء مستقیماً به معادل‌های YAML خود تبدیل می‌شوند. مقادیری که شامل دونقطه یا کاراکترهای خاص هستند به‌طور خودکار نقل‌قول می‌گیرند تا خروجی YAML معتبر باشد.

چرا JSON را به YAML تبدیل کنیم؟

YAML استاندارد فایل‌های پیکربندی است؛ JSON چیزی است که API‌ها برمی‌گردانند. تبدیل بین آن‌ها به شما امکان می‌دهد برای هر کار از فرمت مناسب استفاده کنید، بدون اینکه داده‌ها را دستی بازنویسی کنید.

تبدیل فوری
JSON را جای‌گذاری کنید و خروجی YAML را فوراً دریافت کنید. بدون انتظار برای پردازش سرور، بدون آپلود فایل، بدون محدودیت نرخ.
🔒
پردازش با حفظ حریم خصوصی
داده‌های شما هرگز از مرورگر خارج نمی‌شوند. تبدیل کاملاً در JavaScript روی دستگاه شما اجرا می‌شود، پس اطلاعات ورود، توکن‌ها و کلیدهای API خصوصی باقی می‌مانند.
🔀
پشتیبانی از هر ساختار JSON
اشیاء عمیقاً تودرتو، آرایه‌های بزرگ، انواع مختلط، رشته‌های Unicode و کاراکترهای خاص همگی به‌درستی تبدیل می‌شوند. این ابزار ساختار کامل داده را حفظ می‌کند.
📋
بدون حساب کاربری یا نصب
صفحه را باز کنید و تبدیل را شروع کنید. بدون ثبت‌نام، بدون افزونه، بدون نصب CLI. روی هر دستگاهی با مرورگر کار می‌کند.

موارد استفاده تبدیل JSON به YAML

Kubernetes و Docker Compose
پاسخ‌های API و پیکربندی‌های صادرشده اغلب به‌صورت JSON می‌رسند. آن‌ها را به YAML تبدیل کنید تا مستقیماً در Kubernetes manifests، Helm charts و Docker Compose استفاده کنید.
پیکربندی CI/CD Pipeline
GitHub Actions، GitLab CI، CircleCI و Azure Pipelines همه از YAML استفاده می‌کنند. وقتی پیکربندی pipeline را به‌صورت برنامه‌ای از JSON تولید می‌کنید، خروجی را قبل از commit کردن تبدیل کنید.
Ansible Playbooks
Ansible برای playbooks و فایل‌های inventory به YAML نیاز دارد. inventory‌های JSON صادرشده از cloud API‌ها را به فرمت YAML مورد نیاز Ansible تبدیل کنید.
بررسی پاسخ API
REST API‌ها JSON برمی‌گردانند. تبدیل یک پاسخ تودرتو به YAML، سلسله‌مراتب داده را در نگاه اول قابل مشاهده می‌کند که اسکن آن از JSON پر از براکت سریع‌تر است.
مهاجرت فایل پیکربندی
هنگام مهاجرت یک برنامه از پیکربندی مبتنی بر JSON (مثلاً tsconfig.json، صادرات package.json) به ابزارهای مبتنی بر YAML، مقادیر را به‌صورت دسته‌جمعی تبدیل کنید تا نیازی به تایپ مجدد نباشد.
یادگیری و مستندسازی
دانشجویان و نویسندگان فنی از JSON/YAML کنار هم استفاده می‌کنند تا بفهمند ساختارهای داده چطور بین فرمت‌ها نگاشت می‌شوند. این مبدل نمونه‌های فوری و دقیقی ارائه می‌دهد.

مقایسه JSON و YAML

JSON و YAML می‌توانند داده‌های یکسانی را نمایش دهند، اما نحو و قابلیت‌هایشان به شیوه‌هایی متفاوت است که برای موارد استفاده خاص اهمیت دارد.

ویژگیJSONYAML
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)

نکات ظریف YAML پس از تبدیل

YAML قوانین تجزیه‌ای دارد که توسعه‌دهندگانی که از JSON می‌آیند را شگفت‌زده می‌کند. این چهار مشکل بیشترین باگ را هنگام کار با خروجی تبدیل‌شده ایجاد می‌کنند.

yes/no بدون نقل‌قول به بولین تبدیل می‌شوند
تجزیه‌کننده‌های YAML 1.1 مقادیر بدون نقل‌قول yes، no، on، off، true و false را به‌عنوان بولین در نظر می‌گیرند. اگر JSON شما یک مقدار رشته‌ای «yes» یا «no» داشته باشد، خروجی YAML ممکن است نقل‌قول‌ها را از دست بدهد و توسط ابزارهای قدیمی به‌عنوان بولین تجزیه شود. YAML 1.2 این را فقط به true/false محدود می‌کند.
خطاهای تورفتگی تجزیه را خراب می‌کنند
YAML از تورفتگی برای تعریف ساختار استفاده می‌کند. یک فاصله اضافی یا کم می‌تواند معنا را تغییر دهد یا خطای تجزیه ایجاد کند. برخلاف JSON که یک کاما اشتباه خطای واضحی می‌دهد، اشتباهات تورفتگی YAML می‌توانند بدون هیچ خطایی سلسله‌مراتب داده شما را تغییر دهند.
دونقطه در مقادیر نیاز به نقل‌قول دارند
دونقطه به دنبال فاصله (": ") جداکننده کلید-مقدار YAML است. اگر رشته JSON شما این الگو را داشته باشد (مثلاً «http://example.com»)، خروجی YAML باید مقدار را نقل‌قول‌گذاری کند. اکثر مبدل‌ها این کار را به‌طور خودکار انجام می‌دهند.
فایل‌های چند-سندی
YAML از چندین سند در یک فایل جداشده با --- پشتیبانی می‌کند. JSON معادلی ندارد. هنگام تبدیل یک آرایه JSON از پیکربندی‌ها، هر عنصر می‌تواند یک سند YAML مجزا شود، یا به‌عنوان عنصر آرایه باقی بماند. بدانید که ابزار هدف شما کدام فرمت را انتظار دارد.

نمونه‌های کد

تبدیل برنامه‌ای JSON به YAML در اکثر زبان‌ها نیاز به یک کتابخانه سریال‌سازی YAML دارد. کتابخانه استاندارد تجزیه JSON را مدیریت می‌کند؛ خروجی YAML به یک بسته اضافی نیاز دارد.

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))"

سوالات متداول

آیا تبدیل JSON به YAML بدون اتلاف است؟
بله، برای تمام انواع استاندارد JSON. رشته‌ها، اعداد، بولین‌ها، null، آرایه‌ها و اشیاء معادل‌های مستقیم YAML دارند. YAML تبدیل‌شده می‌تواند دوباره تجزیه شود تا داده‌های یکسانی تولید کند. تنها تفاوت ظاهری قالب‌بندی است: YAML از تورفتگی به جای آکولاد استفاده می‌کند.
آیا YAML می‌تواند همه چیزی که JSON می‌تواند را نمایش دهد؟
بله. YAML یک superset از JSON است (از YAML 1.2 به بعد). هر سند JSON معتبر، YAML معتبر هم هست. YAML ویژگی‌هایی که JSON ندارد اضافه می‌کند: کامنت‌ها، anchors/aliases، رشته‌های چند-خطی و انواع scalar اضافه مثل تاریخ.
چرا Kubernetes و Docker از YAML به جای JSON استفاده می‌کنند؟
YAML از کامنت‌ها پشتیبانی می‌کند که برای مستندسازی پیکربندی زیرساخت ضروری هستند. همچنین برای ساختارهای عمیقاً تودرتو خواناتر است چون تورفتگی جایگزین شلوغی براکت‌ها می‌شود. Kubernetes در واقع هم JSON و هم YAML را قبول می‌کند، اما جامعه و تمام مستندات رسمی از YAML استفاده می‌کنند.
چطور با فایل‌های بزرگ JSON کار کنم؟
این مبدل در مرورگر شما اجرا می‌شود، پس می‌تواند فایل‌هایی تا چند مگابایت را بدون مشکل مدیریت کند. برای فایل‌های بسیار بزرگ (بالای 50 مگابایت)، از یک CLI مانند yq یا یک اسکریپت Python با کتابخانه PyYAML استفاده کنید. این‌ها داده را به‌صورت جریانی پردازش می‌کنند و حافظه کمتری مصرف می‌کنند.
آیا مبدل ترتیب کلیدها را حفظ می‌کند؟
بله. مبدل کلیدهای YAML را به همان ترتیبی که در ورودی JSON ظاهر می‌شوند خروجی می‌دهد. اشیاء JSON از نظر فنی بر اساس spec بدون ترتیب هستند، اما در عمل تجزیه‌کننده‌ها ترتیب درج را حفظ می‌کنند، و این ابزار آن ترتیب را در خروجی YAML نگه می‌دارد.
خروجی از کدام نسخه YAML پیروی می‌کند؟
خروجی از قراردادهای YAML 1.2 پیروی می‌کند. این یعنی فقط true و false به‌عنوان مقادیر بولین در نظر گرفته می‌شوند (نه yes/no/on/off). رشته‌هایی که ممکن است اشتباه تفسیر شوند به‌طور خودکار نقل‌قول می‌گیرند تا از ابهام در تجزیه جلوگیری شود.
آیا جای‌گذاری کلیدها و توکن‌های API در این ابزار امن است؟
بله. تبدیل کاملاً در مرورگر شما با استفاده از JavaScript اجرا می‌شود. هیچ داده‌ای به هیچ سروری منتقل نمی‌شود. می‌توانید این را با باز کردن network inspector مرورگر و مشاهده اینکه هیچ درخواستی در حین تبدیل ارسال نمی‌شود تأیید کنید.