تبدیل YAML به JSON، دادههای نوشتهشده در YAML (YAML Ain't Markup Language) را به JSON (JavaScript Object Notation) تبدیل میکند. هر دو فرمت دادههای ساختاریافته را به صورت جفتهای کلید-مقدار، دنبالهها و اشیاء تودرتو نمایش میدهند، اما در نحو تفاوت دارند. YAML از تورفتگی و علائم نگارشی حداقلی استفاده میکند، در حالی که JSON از آکولاد، براکت و نقلقول اجباری استفاده میکند. تبدیل میان این دو هنگام انتقال دادههای پیکربندی بین سیستمهایی که فرمتهای متفاوتی انتظار دارند، کاری رایج است.
YAML برای خوانایی انسانی طراحی شده است. از توضیحات، رشتههای چندخطی، لنگرها و ناممستعارها پشتیبانی میکند که هیچکدام در JSON وجود ندارند. هنگامی که YAML را به JSON تبدیل میکنید، این ویژگیهای اختصاصی YAML برطرف میشوند: لنگرها به صورت درونخطی گسترش مییابند، توضیحات حذف میشوند و بلوکهای چندخطی به رشتههای Escapeشده تبدیل میشوند. خروجی، JSON معتبری است که هر تجزیهگر JSON میتواند آن را بخواند.
مشخصه YAML 1.2 به صراحت JSON را به عنوان زیرمجموعهای از YAML تعریف میکند، به این معنا که هر سند JSON معتبر، یک سند YAML معتبر نیز هست. عکس این موضوع صحیح نیست. اسناد YAML که از توضیحات، لنگرها یا کلیدهای پیچیده استفاده میکنند، معادل مستقیمی در JSON ندارند و باید در حین تبدیل سادهسازی شوند. این ابزار آن تبدیل را به صورت خودکار انجام میدهد و از هر ورودی YAML معتبری، JSON تمیز و خوشفرمت تولید میکند.
تبدیل دستی YAML به JSON، بهویژه با ساختارهای تودرتوی عمیق یا مقادیر چندخطی، مستعد خطاست. یک مبدل مبتنی بر مرورگر نتیجه را فوری ارائه میدهد و خطاهای نحوی YAML را پیش از رسیدن به برنامه شما شناسایی میکند.
⚡
تبدیل فوری در مرورگر
YAML خود را پیست کنید و خروجی JSON فرمتبندیشده را در میلیثانیه دریافت کنید. نیازی به نصب ابزار CLI، مرحله ساخت یا مدیریت وابستگی نیست.
🔀
پشتیبانی از هر ساختار YAML معتبر
از مپینگهای تودرتو، دنبالهها، رشتههای چندخطی (بلوکهای literal و folded)، لنگرها، ناممستعارها، کلیدهای ادغام و تمام انواع اسکالر YAML 1.2 پشتیبانی میکند.
🔒
دادههای شما خصوصی میماند
تمام تجزیهگری به صورت محلی در مرورگر شما با استفاده از JavaScript اجرا میشود. محتوای YAML شما هرگز به سرور ارسال نمیشود و آن را برای فایلهای پیکربندی حاوی اطلاعات محرمانه یا مسیرهای داخلی ایمن میکند.
📋
کپی یا تنظیم فرمت خروجی
بین تورفتگی ۲ فاصله و ۴ فاصله جابهجا شوید. نتیجه JSON را با یک کلیک در کلیپبورد کپی کنید تا مستقیماً در کد، درخواستهای API یا فایلهای تنظیمات استفاده کنید.
موارد استفاده YAML به JSON
توسعه فرانتاند
فایلهای پیکربندی YAML از یک سیستم طراحی یا CMS را به JSON تبدیل کنید تا توسط باندلکنندههای JavaScript، REST APIها یا کتابخانههای i18n که ورودی JSON نیاز دارند، مصرف شوند.
مهندسی بکاند
فایل application.yml اسپرینگ بوت یا database.yml ریلز را به JSON تبدیل کنید تا در اسکریپتهای استقرار، دروازههای API یا سرویسهایی که فقط پیکربندی JSON میپذیرند، وارد کنید.
DevOps و CI/CD
فایل docker-compose.yml، ورکفلوهای GitHub Actions یا مانیفستهای Kubernetes را به JSON تبدیل کنید تا با ابزارهای اعتبارسنجی، موتورهای سیاست مثل OPA یا اشکالزدایی با jq استفاده شوند.
QA و آزمایش
فیکسچرهای آزمایشی YAML را به پیلودهای JSON برای ابزارهای آزمایش API مانند Postman، Insomnia یا مجموعههای آزمایش خودکار که بدنه درخواست JSON انتظار دارند، تبدیل کنید.
مهندسی داده
تعریفهای pipeline با فرمت YAML (Airflow، dbt، Dagster) را به JSON تبدیل کنید تا اعتبارسنجی طرح، دستکاری برنامهنویسی یا یکپارچهسازی با کاتالوگهای متادیتا انجام شود.
یادگیری و مستندسازی
به سرعت ببینید ساختارهای YAML چگونه به معادلهای JSON خود نگاشت میشوند، هنگام مطالعه فرمتهای پیکربندی یا نوشتن مستندات.
جدول مرجع نگاشت انواع YAML به JSON
هر نوع داده YAML در حین تبدیل به یک نوع JSON مشخص نگاشت میشود. جدول زیر هر سازه YAML را در کنار خروجی JSON آن نشان میدهد. درک این نگاشتها به شما کمک میکند پیشبینی کنید دادههای YAML شما پس از تبدیل چگونه به نظر میرسند و از غافلگیری با انواعی مثل booleanها یا مقادیر null جلوگیری کنید.
نوع YAML
نحو YAML
خروجی JSON
Mapping
name: Alice
{ "name": "Alice" }
Sequence
- apple\n- banana
["apple", "banana"]
String
greeting: hello world
"hello world"
Integer
count: 42
42
Float
ratio: 3.14
3.14
Boolean
active: true
true
Null
value: null
null
Multiline (|)
bio: |\n Line one\n Line two
"Line one\nLine two\n"
Folded (>)
note: >\n A long\n paragraph
"A long paragraph\n"
Anchor/Alias
&default\n <<: *default
Resolved inline (no $ref)
نحو YAML در مقابل JSON
YAML و JSON همان مدل داده را نمایش میدهند اما با قوانین نحوی متفاوت. تفاوتهای زیر توضیح میدهند چرا برخی ویژگیهای YAML — مثل توضیحات و لنگرها — معادلی در JSON ندارند.
YAML
از تورفتگی برای تودرتویی استفاده میکند (بدون آکولاد). از توضیحات با # پشتیبانی میکند. رشتهها معمولاً نیازی به نقلقول ندارند. مقادیر چندخطی با | (literal) و > (folded) را پشتیبانی میکند. از لنگرها (&name) و ناممستعارها (*name) برای استفاده مجدد پشتیبانی میکند. در YAML 1.2 فقط true و false به عنوان مقادیر boolean شناخته میشوند؛ تجزیهگرهای قدیمی YAML 1.1 yes، no، on و off را هم میپذیرفتند، اما در YAML 1.2 اینها به عنوان رشتههای عادی تلقی میشوند.
JSON
از آکولاد و براکت برای تودرتویی استفاده میکند. هیچ نحوی برای توضیح ندارد. تمام رشتهها باید با نقلقول دوتایی محصور شوند. هیچ literal رشته چندخطیای وجود ندارد — به جای آن از دنبالههای escape مانند \n استفاده کنید. هیچ مکانیزم لنگر یا ناممستعار ندارد. مقادیر boolean دقیقاً true و false با حروف کوچک هستند. تمام کلیدها باید رشتههای نقلقولدار باشند. کاماهای انتهایی نامعتبرند.
نمونههای کد
در زیر نمونههای کاری برای تبدیل YAML به JSON به صورت برنامهنویسی آمده است. هر نمونه یک رشته YAML را تجزیه میکند و JSON فرمتبندیشده تولید میکند.
# Convert a YAML file to JSON with yq
yq -o=json config.yaml > config.json
# Pipe YAML into yq for one-off conversion
echo "name: demo" | yq -o=json
# → { "name": "demo" }
# Python one-liner (no extra install on most systems)
python3 -c "import yaml, json, sys; print(json.dumps(yaml.safe_load(sys.stdin), indent=2))" < config.yaml
سوالات متداول
آیا YAML یک فوقمجموعه از JSON است؟
بله، از YAML 1.2 (منتشرشده در ۲۰۰۹). هر سند JSON معتبر، یک سند YAML معتبر نیز هست. مشخصه YAML به طور عمدی بهروزرسانی شد تا سازگاری کامل با JSON تضمین شود. با این حال، عکس این موضوع صحیح نیست — ویژگیهای YAML مثل توضیحات، لنگرها و کلیدهای بدون نقلقول معادلی در JSON ندارند.
در حین تبدیل با توضیحات YAML چه اتفاقی میافتد؟
توضیحات حذف میشوند. JSON هیچ نحوی برای توضیح ندارد، بنابراین هر خطی که در ورودی YAML شما با # شروع میشود در حین تبدیل از دست میرود. اگر نیاز دارید توضیحات را حفظ کنید، فایل YAML اصلی را به عنوان منبع اصلی نگه دارید و هر بار که نیاز داشتید JSON را از آن تولید کنید.
لنگرها و ناممستعارهای YAML چگونه مدیریت میشوند؟
لنگرها (&name) و ناممستعارها (*name) در حین تجزیه برطرف میشوند. ناممستعار با یک کپی کامل از دادههای لنگرشده جایگزین میشود. JSON حاصل هیچ ارجاعی ندارد — تمام مقادیر به صورت درونخطی گسترش یافتهاند. کلیدهای ادغام (<<: *name) به همین شکل برطرف میشوند.
آیا تبدیل YAML به JSON میتواند موجب از دست رفتن داده شود؟
برای مقادیر داده، نه. تمام انواع اسکالر YAML (رشتهها، اعداد، booleanها، null) معادل مستقیمی در JSON دارند. آنچه از دست میرود: توضیحات، دستورالعملهای tag، نامهای لنگر و تمایز بین سبکهای block و flow. اگر YAML شما بر tagهای سفارشی (!!python/object، !!timestamp) متکی است، اینها به مقادیر عادی برطرف میشوند یا ممکن است بسته به تجزیهگر خطای تجزیه ایجاد کنند.
چرا boolean 'yes' در YAML در JSON به رشته تبدیل میشود؟
این ابزار از js-yaml v4 استفاده میکند که از تفسیر boolean YAML 1.2 پیروی میکند. فقط true و false (با هر نوع حروف) به عنوان boolean شناخته میشوند. مقادیری مثل yes، no، on و off به عنوان رشتههای عادی تلقی میشوند و به صورت رشتههای نقلقولدار در خروجی JSON ظاهر میشوند. اگر مقادیر رشتهای غیرمنتظرهای میبینید که انتظار boolean داشتید، در منبع YAML خود به true یا false تغییر دهید.
حداکثر اندازه فایل YAML که این ابزار میتواند مدیریت کند چقدر است؟
ابزار در مرورگر شما اجرا میشود، بنابراین محدودیت به حافظه موجود دستگاه شما بستگی دارد. در عمل، فایلهای تا چند مگابایت بدون مشکل تبدیل میشوند. برای فایلهای بسیار بزرگ (۵۰ مگابایت به بالا)، یک ابزار CLI مثل yq یا یک اسکریپت Python با PyYAML مطمئنتر خواهد بود، زیرا میتوانند داده را به جای بارگذاری همه چیز در حافظه، جریانی پردازش کنند.
رشتههای چندخطی YAML چگونه به JSON تبدیل میشوند؟
YAML دو سبک بلوک اسکالر چندخطی دارد. بلوکهای literal (|) شکستهای خط را به عنوان کاراکترهای \n در رشته JSON حفظ میکنند. بلوکهای folded (>) شکستهای خط تکی را با فاصله جایگزین میکنند و چند خط را به یک پاراگراف واحد تبدیل میکنند. هر دو سبک به طور پیشفرض یک خط جدید انتهایی اضافه میکنند که میتوانید با نشانگر chomping (|- یا >-) آن را حذف کنید.