ממיר YAML ל-JSON
הדביקו YAML (מניפסטים של Kubernetes, Docker Compose, תצורות CI) וקבלו מיד JSON נקי. שגיאות מציגות את השורה המדויקת עם סמן.
רץ בדפדפן שלכםבלי הרשמהשום דבר לא מועלה
איך משתמשים בכלי YAML ל-JSON
- הדביקו YAML בתיבת הקלט או פתחו קובץ
.yaml/.yml. - ה-JSON מופיע בתיבת הפלט תוך כדי הקלדה. בחרו 2 רווחים, 4 רווחים או טאבים לפלט.
- סמנו מיון מפתחות כדי לסדר את המפתחות בסדר אלפביתי. זה עוזר בהשוואת תצורות.
- אם ה-YAML לא תקין, שורת הסטטוס מציגה את השורה והעמודה, והשורות הבעייתיות מופיעות מתחתיה עם סמן
^. - העתיקו או הורידו את ה-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 שלי מועלה לאנשהו?
למה ה-YAML שלי נכשל עם „bad indentation”?
-) מוזחים באופן עקבי מתחת למפתח האב שלהם.מה קורה להערות ב-YAML?
למה <code>no</code> נשאר מחרוזת?
true/false הם ערכים בוליאניים. מפענחי YAML 1.1 ישנים היו הופכים את no, yes, on ו-off לבוליאניים („בעיית נורווגיה”).אפשר להמיר מניפסט של Kubernetes עם כמה משאבים?
--- הופך לאיבר אחד במערך ה-JSON של הפלט, מוכן ל-jq או ל-kubectl apply -f -, שמקבל גם רשימות JSON.