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

جمعبندی: برای داده ماشین-به-ماشین از JSON و برای پیکربندیای که انسان ویرایش میکند از YAML استفاده کنید؛ وقتی کامنت، متن چندخطی یا anchor لازم دارید YAML را ترجیح دهید و وقتی هر زبانی باید همان payload را بدون ابهام تجزیه کند JSON.
کنار هم
{
"server": {
"host": "127.0.0.1",
"port": 8080
}
}
server:
host: 127.0.0.1
port: 8080
ساختار یکسان. YAML نشانهگذاری را حذف میکند و جایی برای کامنت میگیرد.
کجا تفاوت دارند
| JSON | YAML | |
|---|---|---|
| ساختار | آکولاد و ویرگول | تورفتگی |
| کامنت | ندارد | دارد |
| رشتهها | گیومه دوتایی، escape لازم | معمولاً خام |
| متن چندخطی | escapeهای \n یا آرایه |
اسکالرهای بلوکی ` |
| بازاستفاده | ندارد | anchor با & و alias با * |
| اسناد چندگانه | در آرایه بپیچید | جداکننده --- |
| سرعت تجزیه | سریع | کندتر، قواعد تورفتگی |
| ابهام | بسیار کم | no به بولی تجزیه میشود، تورفتگی یک واحد خطا |
ردیف آخر هزینه واقعی YAML است. در YAML 1.1، country: NO بولی false میدهد و version: 1.0 ممکن است شناور شود. JSON اصلاً تایپ ضمنی ندارد.
انتخاب
JSON: بدنه درخواست و پاسخ، پیامهای سرویس-به-سرویس، ستونهای JSON در پایگاهداده، هر چیزی که باید در هر زبان یکسان تجزیه شود.
YAML: اکوسیستمهایی که پیشفرضش است (Kubernetes، Ansible، GitHub Actions، Docker Compose)؛ پیکربندیای که توضیح لازم دارد؛ فایلهایی که متن طولانی غالب دارند مانند گواهیها، اسکریپتها یا SQL.
تبدیل چه چیزی را از دست میدهد
YAML → JSON: همه کامنتها، بازاستفاده anchor (به تکراریها گسترده میشود)، همه اسناد جز اولی، و املای اصلی تاریخها و بولیها.
JSON → YAML: تمایز رشته/عدد ضعیف میشود، پس "8080" و 8080 هر دو برای ایمن ماندن به گیومه صریح نیاز دارند.
برای مهاجرت و بازرسی یکباره تبدیل کنید. یک فایل واحد را در دو قالب بهعنوان نمای موازی نگه ندارید.
پرسشهای متداول
چگونه بین JSON و YAML تصمیم بگیرم؟
با این شروع کنید که چه کسی فایل را میخواند و نگهداری میکند: وقتی برنامهای آن را تولید میکند، از مرز زبانها عبور میکند و باید قابل پیشبینی تجزیه شود JSON استفاده کنید؛ وقتی انسان ویرایشش میکند و توضیح فیلد یا متن چندخطی طولانی لازم دارد YAML. به هم تبدیل میشوند، اما همان پیکربندی را بلندمدت در هر دو قالب نگه ندارید.
چرا YAML ابهام نوع بیشتری تولید میکند؟
YAML تایپ ضمنی دارد، پس مقادیری مانند NO، on یا 1.0 میتوانند بولی، تاریخ یا عدد شوند. JSON فقط نوع صریح دارد: رشته باید گیومه داشته باشد، که تجزیه را بین زبانها قابل پیشبینیتر میکند.
آیا کامنت و anchor باید هنگام تبدیل YAML به JSON باقی بمانند؟
نه. کامنت، anchor و اسناد چندگانه YAML در JSON قابل نمایش نیستند؛ anchorها به محتوای تکراری گسترده میشوند. اگر باید حفظشان کنید، از کتابخانه YAML با Document API استفاده کنید نه رفتوبرگشت شیء.