تفاوت JSON، YAML و XML و انتخاب قالب مناسب
۲ دقیقه مطالعهبروزرسانی:
هر سه قالب دادهی ساختیافته را مینویسند، ولی با فلسفههای متفاوت. انتخاب درست یعنی کمتر خطا و کمتر تبدیل دستی. اینجا تفاوتهای عملی را میبینیم.
یک داده، سه شکل
{
"name": "خط وب",
"tools": ["seo", "image"],
"active": true
}name: خط وب
tools:
- seo
- image
active: true<site>
<name>خط وب</name>
<tools>seo</tools>
<tools>image</tools>
<active>true</active>
</site>مقایسه
| JSON | YAML | XML | |
|---|---|---|---|
| خوانایی انسانی | خوب | بسیار خوب | متوسط |
| حجم | کم | کم | بیشتر (تگها) |
| توضیح (comment) | ندارد | دارد (#) | دارد (<!-- -->) |
| نوع داده | رشته، عدد، بولی، null، آرایه، شیء | مثل JSON و بیشتر | همهچیز متن است |
| ویژگی (attribute) | ندارد | ندارد | دارد |
| کاربرد رایج | API و وب | فایلهای تنظیمات (Docker، CI) | سیستمهای قدیمی، RSS، sitemap، SOAP |
کدام را کجا استفاده کنیم؟
- JSON: ارتباط مرورگر و سرور و API. تقریباً همهی زبانها پشتیبانی میکنند.
- YAML: فایلهایی که انسان مینویسد و میخواند: Docker Compose، GitHub Actions، Kubernetes.
- XML: وقتی استاندارد یا سرویس آن را الزام میکند (RSS، sitemap، سرویسهای سازمانی)، یا وقتی ساختار سند با ویژگیها لازم است.
خطاهای رایج
JSON
- ویرگول اضافه بعد از آخرین عضو
- نقلقول تکی بهجای دوتایی
- نداشتن نقلقول دور کلید
- توضیح نوشتن (مجاز نیست)
YAML
- ترکیب تب و فاصله در تورفتگی (فقط فاصله مجاز است)
- تورفتگی ناهمگون که ساختار را بیصدا عوض میکند
- کلید تکراری، که ابزار ما خطا حساب میکند
- مقدارهایی مثل
noیاonکه بعضی تجزیهگرها بولی میگیرند؛ در شک، مقدار را در نقلقول بگذارید
XML
- تگی که بسته نشده
- نام عنصر نامعتبر (فاصله یا شروع با عدد)
- نویسههای
&و<در متن، بدون escape
نکات تبدیل
- XML نوع داده ندارد؛ در تبدیل XML به JSON همهی مقدارها متن میمانند تا مقادیری مثل
00123خراب نشوند. - ویژگیهای XML در JSON/YAML با پیشوند
@_نمایش داده میشوند. - لیستهای JSON در XML به عنصرهای تکراری تبدیل میشوند.
- کلیدهای JSON که نام معتبر XML نیستند اصلاح میشوند: فاصله و نمادها به
_تبدیل و کلید شروعشده با عدد با_پیشوند میگیرد. کلیدهای فارسی معتبرند و میمانند.
برای تبدیل مطمئن و دیدن محل خطا از ابزار تبدیل داده استفاده کنید؛ همهچیز در مرورگر انجام میشود و دادهی شما به سرور نمیرود.
با ابزار امتحان کنید
سؤالات متداول
YAML از JSON بهتر است؟
برای فایلهایی که انسان ویرایش میکند بله، به دلیل خوانایی و توضیح. برای تبادل دادهی ماشینی، JSON سادهتر و ایمنتر است چون قواعدش کمتر و سختگیرتر است.
آیا JSON زیرمجموعهی YAML است؟
در عمل بیشتر JSONهای معتبر در YAML 1.2 معتبرند، ولی به این فرض در ابزارهای مختلف تکیه نکنید.