ממיר YAML ל-JSON

הדביקו YAML‏ (מניפסטים של Kubernetes,‏ Docker Compose, תצורות CI) וקבלו מיד JSON נקי. שגיאות מציגות את השורה המדויקת עם סמן.

רץ בדפדפן שלכםבלי הרשמהשום דבר לא מועלה

פלט JSON

איך משתמשים בכלי YAML ל-JSON

  1. הדביקו YAML בתיבת הקלט או פתחו קובץ .yaml/.yml.
  2. ה-JSON מופיע בתיבת הפלט תוך כדי הקלדה. בחרו 2 רווחים, 4 רווחים או טאבים לפלט.
  3. סמנו מיון מפתחות כדי לסדר את המפתחות בסדר אלפביתי. זה עוזר בהשוואת תצורות.
  4. אם ה-YAML לא תקין, שורת הסטטוס מציגה את השורה והעמודה, והשורות הבעייתיות מופיעות מתחתיה עם סמן ^.
  5. העתיקו או הורידו את ה-JSON, או לחצו על החלפה כדי להמיר אותו בחזרה ל-YAML.

איך YAML ממופה ל-JSON

JSON הוא תת-קבוצה של YAML 1.2, ולכן כל mapping של YAML הופך לאובייקט JSON, כל sequence הופך למערך, וערכי scalar הופכים למחרוזות, מספרים, ערכים בוליאניים או null. תכונות שקיימות רק ב-YAML נפתרות במהלך ההמרה:

  • הערות (# …) מושמטות, כי ב-JSON אין הערות.
  • Anchors ו-aliases (&base, *base, <<: *base) נפרשים לעותקים מלאים.
  • חותמות זמן כמו 2024-01-02 הופכות למחרוזות ISO 8601.
  • מחרוזות מרובות שורות (בלוקים מסוג literal‏ | ו-folded‏ >) הופכות למחרוזות רגילות עם escapes של \n.

YAML מרובה מסמכים

קובץ אחד יכול להכיל כמה מסמכי YAML המופרדים ב----, כפי שמקובל במניפסטים של Kubernetes. ל-JSON אין מקבילה לכך, ולכן הממיר מחזיר מערך JSON עם איבר אחד לכל מסמך ומציין זאת בשורת הסטטוס. ‏--- בודד בסוף הקובץ מתעלמים ממנו.

מלכודות של YAML 1.1 לעומת 1.2

הממיר הזה פועל לפי YAML 1.2, המפרט הנוכחי. כלים ישנים רבים (PyYAML, ‏Psych של Ruby, וחלק מגרסאות Kubernetes ו-Ansible) עדיין קוראים YAML 1.1, שבו הכללים שונים:

  • בעיית נורווגיה: ב-YAML 1.1, ‏country: no פירושו false, ולכן קוד המדינה של נורווגיה NO נעלם. אותו דבר נכון ל-yes, on, off, y ו-n. ‏YAML 1.2 מתייחס רק ל-true ול-false כערכים בוליאניים.
  • מספרים אוקטליים: 0755 הוא אוקטלי ב-1.1 אבל עשרוני רגיל ב-1.2, שמשתמש ב-0o755. הקיפו הרשאות קבצים במירכאות ליתר ביטחון.
  • מספרים בבסיס 60: ב-1.1, ‏22:30 עלול להתפרש כמספר 1350. הקיפו במירכאות שעות ומיפויי פורטים כמו "8080:80".

בכיוון JSON → YAML מחרוזות דו-משמעיות ('no', 'on', 'y') מוקפות במירכאות אוטומטית, כך שה-YAML שנוצר נקרא אותו דבר בשתי הגרסאות.

שאלות נפוצות

האם ה-YAML שלי מועלה לאנשהו?
לא. הניתוח מתבצע בדפדפן שלכם עם ספריית הקוד הפתוח js-yaml. תצורות שמכילות סודות או שמות host פנימיים לעולם לא יוצאות מהמחשב שלכם.
למה ה-YAML שלי נכשל עם „bad indentation”?
הקינון ב-YAML מוגדר באמצעות רווחים, וטאבים אסורים להזחה. ודאו שמפתחות אחים מיושרים בדיוק ושפריטי רשימה (-) מוזחים באופן עקבי מתחת למפתח האב שלהם.
מה קורה להערות ב-YAML?
הן מוסרות. ל-JSON אין תחביר הערות, ולכן אי אפשר להעביר אותן. המרה חזרה ל-YAML לא תשחזר אותן.
למה <code>no</code> נשאר מחרוזת?
הכלי פועל לפי YAML 1.2, שבו רק true/false הם ערכים בוליאניים. מפענחי YAML 1.1 ישנים היו הופכים את no, yes, on ו-off לבוליאניים („בעיית נורווגיה”).
אפשר להמיר מניפסט של Kubernetes עם כמה משאבים?
כן. כל משאב שמופרד ב---- הופך לאיבר אחד במערך ה-JSON של הפלט, מוכן ל-jq או ל-kubectl apply -f -, שמקבל גם רשימות JSON.

כלים קשורים