تبدیل YAML به JSON؛ خروجی معتبر همیشه درست نیست

چرا مهم است

اگر تنظیمات YAML را برای یک API به JSON تبدیل می‌کنی، معتبر بودن خروجی کافی نیست؛ نوع مقدارها یا تنظیمات مشترک ممکن است تغییر کنند. همچنین فرستادن فایل به ابزار server-side می‌تواند اطلاعات حساس داخل آن را به سرور دیگری بفرستد.

قبل از خواندن، این‌ها را بدان۴ مفهوم
Anchor

در YAML،؜ نشانه‌ای با & که یک مقدار یا بخش از محتوا را مشخص می‌کند تا بتوان در جای دیگری به آن ارجاع داد.

در حال نگارش: Anchor

Alias

در YAML،؜ ارجاعی با * به محتوایی که قبلاً با Anchor مشخص شده است.

در حال نگارش: Alias

Merge Key

کلید ویژهٔ << در YAML که برای ادغام محتوای یک map در map دیگر به کار می‌رود.

در حال نگارش: Merge Key

Multi-document

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

در حال نگارش: Multi-document

تنظیمات Kubernetes،؜ Docker Compose و GitHub Actions اغلب با YAML نوشته می‌شوند، اما API یا ابزاری که آن‌ها را دریافت می‌کند ممکن است JSON بخواهد. نکتهٔ اصلی این مطلب این است که خروجی JSON می‌تواند معتبر باشد، اما معنای تنظیمات اولیه را حفظ نکرده باشد.

YAML و JSON هر دو map و list تو‌در‌تو را توصیف می‌کنند، ولی قواعد یکسانی ندارند. برای نمونه، مقدار بدون کوتیشن yes در YAML 1.1 از نوع boolean است، اما در YAML 1.2 یک string محسوب می‌شود. همین تفاوت دربارهٔ on و off هم وجود دارد. مقداری مانند 2026-11-08 نیز ممکن است در یک parser به date object تبدیل شود و در دیگری string باقی بماند. بنابراین ابزار تبدیل باید مشخص کند از قواعد کدام نسخهٔ YAML پیروی می‌کند.

موضوع دیگر، Anchor و Alias است: Anchor یک بخش را مشخص می‌کند و Alias امکان ارجاع دوباره به آن را می‌دهد. Merge Key با علامت << هم برای ادغام تنظیمات مشترک به کار می‌رود. مطلب مثالی از Docker Compose می‌زند که در آن تنظیمات logging مشترک میان سه service استفاده شده است. اگر ابزار تبدیل به‌جای گسترش ارجاع‌ها، آن‌ها را حذف کند، خروجی JSON معتبر خواهد بود، اما تنظیمات logging را نخواهد داشت.

تبدیل درست باید این ارجاع‌ها را به کپی کامل محتوا تبدیل کند. همچنین فایل‌های Multi-document را بشناسد: برای مثال، اگر یک فایل Kubernetes شامل سه سند جداشده با --- باشد، خروجی پیشنهادی مطلب یک array با یک عضو برای هر سند است، نه ادغامی که بخشی از محتوا را حذف کند. گزارش خطا نیز باید شمارهٔ خط و ستون داشته باشد. در مسیر معکوس، یعنی JSON به YAML،؜ مطلب بر خروجی خوانا با block style تأکید می‌کند، چون معمولاً قرار است انسانی آن را ویرایش کند.

حریم خصوصی هم بخشی از انتخاب ابزار است. فایل تنظیمات ممکن است اطلاعات ورود، نام میزبان‌های داخلی یا منطق deployment داشته باشد؛ چسباندن آن در ابزاری با پردازش server-side این اطلاعات را به سرور دیگری می‌فرستد. نویسنده ابزار رایگان خود را معرفی می‌کند و می‌گوید تبدیل را کاملاً در مرورگر انجام می‌دهد و چیزی از دستگاه خارج نمی‌شود. توصیهٔ پایانی او، مقایسهٔ خروجی با محتوای مورد انتظار، به‌ویژه بخش‌های دارای Anchor است.

نکته کلیدی

بعد از تبدیل، خروجی را با محتوای مورد انتظارت مقایسه کن؛ به نوع مقدارها، گسترش Anchor‌ها و تعداد سندها دقت کن. پیش از واردکردن تنظیمات حساس هم بررسی کن که پردازش در مرورگر انجام می‌شود یا فایل به سرور می‌رود.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۴)