JSON ↔ YAML

مبدل JSON ↔ YAML

تبدیل دوطرفه‌ای ساخته‌شده برای k8s، GitHub Actions، Docker Compose و helm. پیش‌نمایش زنده، خروجی YAML اصیل، کاملاً در مرورگر شما.

js-yaml عالی است اما تقریباً ۳۰ کیلوبایت minified به هر بارگذاری صفحه اضافه می‌کند. YAML واقعی فایل‌های پیکربندی فقط بخش کوچکی از مشخصات را استفاده می‌کند — block mappings، block sequences، flow style، انواع scalar، literal های چندخطی. ما دقیقاً همان زیرمجموعه (~۵ کیلوبایت) را دستی نوشته‌ایم تا بارگذاری اولیه سریع بماند. اگر YAML شما از anchors، aliases یا custom tags استفاده می‌کند، آن را در یک CI pipeline که از js-yaml استفاده می‌کند جای‌گذاری کنید.

سه ویژگی نادر در فایل‌های پیکربندی: (۱) anchors و aliases (&name / *name) — برای حذف تکرار درون یک سند؛ (۲) custom tags (!!str / !!float / !!omap) — برای override کردن استنتاج ضمنی نوع؛ (۳) فایل‌های چند سندی با جداکنندهٔ ---. هیچ‌کدام از این‌ها در فایل‌های استاندارد k8s، GitHub Actions، Docker Compose، helm یا ansible دیده نمی‌شوند. اگر به آن‌ها نیاز دارید، از یک پارسر کامل YAML استفاده کنید.

ورودی JSON
خروجی YAML

ساخته‌شده برای YAML واقعی دنیای DevOps

k8s، GitHub Actions، Docker Compose، helm، ansible — به‌علاوهٔ چند تماس کوچک که استفاده از آن را واقعاً لذت‌بخش می‌کند.

دوطرفه و زنده

هر فرمتی را جای‌گذاری کنید، بلافاصله دیگری را دریافت کنید. خروجی با هر کلید به‌روزرسانی می‌شود — بدون دکمهٔ تبدیل. جهت را با یک کلیک تغییر دهید و همان ابزار به‌صورت معکوس اجرا می‌شود.

زیرمجموعهٔ YAML 1.2 برای فایل‌های پیکربندی

block + flow mappings، block + flow sequences، scalars (رشته، عدد، بولین، null)، block scalars از نوع چندخطی literal (|) و folded (>). ۹۹٪ k8s manifests، GitHub Actions، Docker Compose، GitLab CI، helm values و ansible playbooks را پوشش می‌دهد.

خروجی YAML اصیل و دست‌نویس‌گونه

JSON → YAML همان YAML ای را تولید می‌کند که خودتان دستی می‌نویسید: کلیدهای plain-style (بدون نقل‌قول)، رشته‌ها فقط زمانی نقل‌قول می‌شوند که با کلمات رزرو (true/false/null/yes/no) یا اعداد تداخل پیدا کنند، رشته‌های چندخطی به‌صورت block scalar با | رندر می‌شوند، تورفتگی قابل تنظیم ۲ یا ۴ فاصله.

Round-trip امن

JSON → YAML → JSON یک سند بایت‌به‌بایت یکسان تولید می‌کند. در هر جهتی تبدیل کنید، جهت دیگر همیشه بدون خطا برمی‌گردد. هیچ نوع داده‌ای بی‌سروصدا گم نمی‌شود و هیچ مقداری coerce نمی‌گردد.

حریم خصوصی در طراحی

پیکربندی شما هرگز از دستگاهتان خارج نمی‌شود. پارسر و سریالایزر دست‌نویس به‌صورت محلی به‌عنوان JavaScript اجرا می‌شوند. DevTools → Network را باز کنید و صفر درخواست خروجی را تأیید کنید.

کوچک و سریع

JavaScript خالص، بدون وابستگی به js-yaml. بارگذاری اولیه کمتر از ۲۵ کیلوبایت gzipped است. یک k8s manifest با حجم ۱۰۰ کیلوبایت روی یک لپ‌تاپ معمولی در کمتر از ۳۰ میلی‌ثانیه تبدیل می‌شود.

چطور JSON ↔ YAML را تبدیل کنیم

سه گام از پیکربندی خام تا فرمتی که نیاز دارید.

  1. 1

    JSON یا YAML خود را جای‌گذاری کنید

    پیکربندی خود را در پنل ورودی رها کنید. ابزار از طریق dropdown جهت تشخیص می‌دهد که کدام فرمت را جای‌گذاری کرده‌اید — در صورت نیاز آن را تغییر دهید. تبدیل به‌صورت زنده با هر کلید اجرا می‌شود.

  2. 2

    تورفتگی را تنظیم کنید و تأیید کنید

    تورفتگی پیش‌فرض ۲ فاصله است (قرارداد k8s / GitHub Actions). اگر تیم شما از ۴ استفاده می‌کند به آن تغییر دهید. روی Swap کلیک کنید تا خروجی را به ورودی برگردانید — برای راستی‌آزمایی round-trip مفید است (JSON را جای‌گذاری کنید، به YAML تبدیل کنید، swap کنید، دوباره تبدیل کنید، با اصل مقایسه کنید).

  3. 3

    کپی یا دانلود کنید

    آیکون کپی را بزنید تا خروجی به clipboard شما منتقل شود، یا آیکون دانلود را بزنید تا به‌صورت output.yaml یا output.json ذخیره شود. تفاوت اندازهٔ بایتی در footer نمایش داده می‌شود تا ببینید بازنمایی YAML چقدر فشرده است.

ساخته‌شده برای تیم‌های DevOps + بک‌اند

چهار سناریوی رایج که در آن یک ابزار مرورگری با اولویت حریم خصوصی، بهتر از نوشتن یک اسکریپت Python موقت عمل می‌کند.

Round-trip برای manifest های Kubernetes

kubectl get deployment my-app -o json → اینجا جای‌گذاری کنید → YAML → ویرایش → apply. یا: یک YAML manifest از مستندات یک vendor جای‌گذاری کنید، به JSON تبدیل کنید، با jq فیلتر کنید، به YAML برگردانید، commit کنید.

اسنیپت‌های GitHub Actions / GitLab CI از پست‌های وبلاگ

یک پست وبلاگ یک اسنیپت CI را به‌صورت JSON در تم مستندات خود نشان می‌دهد. آن را رها کنید، YAML بگیرید، در .github/workflows/ci.yml جای‌گذاری کنید. یا: یک workflow YAML چند job ای را بگیرید، برای ویرایش برنامه‌نویسی به JSON تبدیل کنید، دوباره برگردانید.

Helm values + Docker Compose

فایل‌های helm values به‌صورت YAML هستند؛ برخی ابزارهای templating به JSON نیاز دارند. values.yaml خود را جای‌گذاری کنید، JSON بگیرید، با ابزار خود اجرا کنید، برگردانید، برای commit به YAML تبدیل کنید. همان workflow برای compose.yaml در Docker Compose.

پیکربندی‌های حساس که نمی‌توانند به سرویس شخص ثالث بروند

پیکربندی‌های حاوی API key ها، secret ها، نام میزبان‌های داخلی، دادهٔ مشتری — هر چیزی که نمی‌توانید در یک مبدل ابری جای‌گذاری کنید. ابزار صرفاً مرورگری هر بایت را روی لپ‌تاپ شما نگه می‌دارد. DevTools → Network را باز کنید و تأیید کنید چیزی خارج نمی‌شود.

۱۰۰٪ خصوصی — در مرورگر شما اجرا می‌شود

پیکربندی‌های شما هرگز از دستگاهتان خارج نمی‌شوند. DevTools → Network را باز کنید و در حین تبدیل، صفر درخواست خروجی خواهید دید.

  • پارسر YAML دست‌نویس، سریالایزر YAML، JSON.parse بومی و کپی / دانلود همگی به‌صورت JavaScript روی دستگاه شما اجرا می‌شوند — بدون CDN js-yaml، بدون API شخص ثالث.
  • بدون login، بدون telemetry روی محتوای پیکربندی. ما فقط از یک کوکی برای وضعیت رضایت کوکی و یکی برای ترجیح زبان استفاده می‌کنیم.
  • اگر با پیکربندی‌های حساس زیرساختی سروکار دارید (اسنیپت‌های kubeconfig، secret manifests، گواهی‌های امضاشده)، داستان حریم خصوصی اهمیت دارد — با اطمینان جای‌گذاری کنید. در DevTools قابل تأیید است.

راهنماهای مرتبط

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

پرسش‌های پرتکرار

اگر <code>js-yaml</code> وجود دارد، چرا پشتیبانی YAML را خودتان بسازید؟

js-yaml عالی است اما تقریباً ۳۰ کیلوبایت minified به هر بارگذاری صفحه اضافه می‌کند. YAML واقعی فایل‌های پیکربندی فقط بخش کوچکی از مشخصات را استفاده می‌کند — block mappings، block sequences، flow style، انواع scalar، literal های چندخطی. ما دقیقاً همان زیرمجموعه (~۵ کیلوبایت) را دستی نوشته‌ایم تا بارگذاری اولیه سریع بماند. اگر YAML شما از anchors، aliases یا custom tags استفاده می‌کند، آن را در یک CI pipeline که از js-yaml استفاده می‌کند جای‌گذاری کنید.

چه ویژگی‌های YAML پشتیبانی نمی‌شوند؟

سه ویژگی نادر در فایل‌های پیکربندی: (۱) anchors و aliases (&name / *name) — برای حذف تکرار درون یک سند؛ (۲) custom tags (!!str / !!float / !!omap) — برای override کردن استنتاج ضمنی نوع؛ (۳) فایل‌های چند سندی با جداکنندهٔ ---. هیچ‌کدام از این‌ها در فایل‌های استاندارد k8s، GitHub Actions، Docker Compose، helm یا ansible دیده نمی‌شوند. اگر به آن‌ها نیاز دارید، از یک پارسر کامل YAML استفاده کنید.

آیا کامنت‌ها حفظ می‌شوند؟

خیر — کامنت‌ها هنگام parse حذف می‌شوند. YAML از کامنت‌ها (#...) پشتیبانی می‌کند اما JSON خیر. round-trip کردن YAML از طریق JSON طبق تعریف، اطلاعات کامنت را از دست می‌دهد. ما به‌جای تلاش برای حفظ آن‌ها با ترفندها، کامنت‌ها را هنگام parse حذف می‌کنیم. اگر به ویرایش YAML با حفظ کامنت‌ها نیاز دارید، YAML را مستقیماً ویرایش کنید.

چرا عدد من به رشته تبدیل می‌شود؟

قواعد ضمنی نوع YAML از JSON آزادتر است: 1.2.3 در YAML یک رشته است (نه عدد، چون دو نقطه دارد) و رشته‌های نسخه مانند v1.2 تا زمانی که نقل‌قول نشوند رشته‌اند. ما از قواعد ضمنی نوع YAML 1.2 پیروی می‌کنیم: فقط ارقامی که با ^-?\d+(\.\d+)?([eE][-+]?\d+)?$ مطابقت دارند به عدد تبدیل می‌شوند؛ بقیه به‌صورت رشته باقی می‌مانند. اگر به مدیریت دقیق عددی نیاز دارید، مقدار را در YAML نقل‌قول کنید یا مستقیماً از JSON استفاده کنید.

آیا چیزی به سرور شما ارسال می‌شود؟

خیر. پارسر YAML، سریالایزر، پارسر JSON و کپی به clipboard همگی به‌صورت JavaScript روی دستگاه شما اجرا می‌شوند. DevTools → Network را باز کنید و در حین تبدیل، صفر درخواست خروجی خواهید دید. k8s manifests محصولاتی، CI configs داخلی، helm values پر از secret را جای‌گذاری کنید — هیچ چیز از لپ‌تاپ شما خارج نمی‌شود.