JSON או YAML
שורה תחתונה: JSON מפריד בעזרת סוגריים מסולסלים ו-YAML בעזרת הזחה: מכונות מקבלות JSON, בני אדם שעורכים קונפיגורציה מקבלים YAML. הערות, anchors ומבנה של כמה מסמכים לא שורדים את ההמרה.

שורה תחתונה: השתמשו ב-JSON לנתונים שעוברים בין מכונות וב-YAML לקונפיגורציה שבני אדם עורכים; עדיפו YAML כשצריך הערות, טקסט רב-שורתי או anchors, ו-JSON כשכל שפה חייבת לפרס את אותו payload בלי עמימות.
זה לצד זה
{
"server": {
"host": "127.0.0.1",
"port": 8080
}
}
server:
host: 127.0.0.1
port: 8080
אותו מבנה. YAML מוותר על הפיסוק ומוסיף מקום להערה.
היכן הם נבדלים
| JSON | YAML | |
|---|---|---|
| מבנה | סוגריים מסולסלים ופסיקים | הזחה |
| הערות | אין | יש |
| מחרוזות | מרכאות כפולות, נדרש escaping | בדרך כלל בלי מרכאות |
| טקסט רב-שורתי | escapes של \n או מערכים |
block scalars של ` |
| שימוש חוזר | אין | anchors & ו-aliases * |
| מספר מסמכים | עטיפה במערך | מפרידים --- |
| מהירות פירוס | מהיר | איטי יותר, חוקי הזחה |
| עמימות | נמוכה מאוד | no נפרס כבוליאני, הזחה של אוף-בי-ואן |
השורה האחרונה היא המחיר האמיתי של YAML. ב-YAML 1.1, country: NO מחזיר את הבוליאני false, ו-version: 1.0 עשוי להפוך ל-float. ל-JSON אין טיפוסיות מרומזת כלל.
בחירה
JSON: גופי בקשות ותשובות, הודעות בין שירותים, עמודות JSON במסדי נתונים, כל דבר שחייב להיפרס באופן זהה בכל שפה.
YAML: אקוסיסטמות שבהן הוא ברירת המחדל (Kubernetes, Ansible, GitHub Actions, Docker Compose); קונפיגורציה שזקוקה להסבר; קבצים שנשלטים על ידי טקסט ארוך כמו תעודות, סקריפטים או SQL.
מה ההמרה מאבדת
YAML → JSON: את כל ההערות, את שימוש החוזר ב-anchors (נפתחים לשכפולים), את כל המסמכים מלבד הראשון, ואת הכתיב המקורי של תאריכים ובוליאנים.
JSON → YAML: ההבחנה בין מחרוזת למספר נחלשת, כך ש-"8080" ו-8080 שניהם צריכים מרכאות מפורשות כדי להישאר בטוחים.
המירו לצורך מיגרציות ובדיקה חד-פעמית. אל תתחזקו את אותו קובץ בשני פורמטים כתצוגות מקבילות.
שאלות ותשובות
איך להחליט בין JSON ל-YAML?
התחילו ממי קורא ומתחזק את הקובץ: השתמשו ב-JSON כשהתוכנית מייצרת אותו, הוא חוצה גבולות שפה, והוא חייב להיפרס באופן צפוי; השתמשו ב-YAML כשבן אדם עורך אותו וצריך הסברי שדות או טקסט רב-שורתי ארוך. הם מתמירים זה לזה, אבל אל תתחזקו את אותה קונפיגורציה בשני הפורמטים לטווח ארוך.
למה YAML יוצר יותר עמימות טיפוסים?
ל-YAML יש טיפוסיות מרומזת, כך שערכים כמו NO, on או 1.0 יכולים להפוך לבוליאנים, תאריכים או מספרים. ל-JSON יש טיפוסים מפורשים בלבד: מחרוזת חייבת מרכאות, מה שהופך את הפירוס לצפוי יותר בין שפות.
האם הערות ו-anchors צריכים לשרוד בהמרת YAML ל-JSON?
לא. הערות YAML, anchors ומספר מסמכים לא ניתנים לייצוג ב-JSON; anchors נפתחים לתוכן משוכפל. אם צריך לשמר אותם, השתמשו בספריית YAML עם Document API במקום סבב המרה של אובייקט.