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

מהו JSON והיכן הוא חי
JSON (JavaScript Object Notation) הוא פורמט קפדני מבוסס סוגריים ומאמרות שנבנה בשביל מכונות קודם כל. כל אובייקט עטוף ב-{}, כל מערך ב-[], מפתחות וערכי מחרוזת במרכאות כפולות, ופריטים מופרדים בפסיקים. זהו פורמט התקשורת ברירת המחדל עבור ממשקי REST ו-GraphQL, הגוף של רוב ה-webhooks, הצורה של מסמכי NoSQL, והדבר שקריאת ה-fetch שלכם מחזירה. כמעט כל שפה מנתחת אותו מחוץ לקופסה, וזו בדיוק הסיבה שהוא ניצח בשכבת ה-API: JSON.parse ב-JavaScript, json בספריית התקן של Python, ומקבילות בכל מקום אחר. הפשרה היא ש-JSON מייגע לכתיבה ידנית ואוסר הערות, כך שהוא פורמט גרוע לקבצים שבן אדם עורך כל היום.
מהו YAML והיכן הוא חי
YAML (YAML Ain't Markup Language) תוכנן עבור העדיפות ההפוכה: בני אדם קודם כל. הוא משמיט את הסוגריים והמרכאות, משתמש בהזחה כדי לבטא קינון, ומאפשר לכם לכתוב הערות עם #. הקריאות הזו היא הסיבה שהוא הפך לשפה המשותפת של קונפיגורציה. קבצי Docker Compose, מניפסטי Kubernetes, זרימות עבודה של GitHub Actions ו-GitLab CI, ספרי הפעלה של Ansible, וקבצי קונפיגורציה של אינספור אפליקציות כולם YAML. מסמך YAML טיפוסי קצר באופן ניכר מ-JSON המקביל וקל בהרבה להשוואה בבקשת משיכה. המחיר של האלגנטיות הזו הוא שבירות, וזה המקום שבו המרה נעשית מעניינת.
ההבדלים המרכזיים שחשובים
שלושה הבדלים מניעים כמעט כל החלטת המרה. ראשית, רווח לבן משמעותי ב-YAML וחסר משמעות ב-JSON. YAML משתמש ברווחים — לעולם לא בטאבים — כדי לציין מבנה, כך שרווח בודד לא מיושר יכול לשנות בשקט את המשמעות של מסמך. JSON כלל לא אכפת לו מהזחה. שנית, YAML תומך בהערות ו-JSON לא. כל הערת # ב-YAML פשוט נעלמת כשאתם מייצרים JSON, כי אין לה איפה להיות. שלישית, ל-YAML יש סוגי מידע עשירים ומרומזים יותר. הוא קורא בשמחה תאריכים, חותמות זמן, ו-null במספר איותים, והוא מנחש סוגים מערכים לא מוקפים במרכאות. ל-JSON יש סט סוגים קטן ומפורש וללא עמימות. שימו לב גם ש-JSON הוא טכנית תת-קבוצה של YAML 1.2, וזו הסיבה ש-JSON תקין בדרך כלל מנותח נקי כ-YAML, אך ההפך לא מובטח.

מלכודות המרה שכדאי לשים לב אליהן
מסע הלוך ושוב לא תמיד ללא אובדן, וכדאי לדעת איפה דברים נשברים:
- בעיית נורווגיה. תחת כללי YAML 1.1,
NOללא מרכאות מנותח כבוליאניfalse, ו-yes,on, ו-offהופכים לבוליאנים גם הם. קוד מדינה או תווית מתג עלולים להתהפך ל-true/falseלפני שתשימו לב. שימו במרכאות ערכים שאתם מתכוונים אליהם כמחרוזות. - המרת מספרים. גרסה כמו
3.10יכולה לאבד את האפס בסופה ולהפוך ל-3.1, ו-1.0הופך למספר גם כשרציתם טקסט. שימו במרכאות מחרוזות גרסה ומזהים. - עוגנים ואליאסים נעלמים. ההפניות
&anchorו-*aliasשל YAML אין להן מקבילה ב-JSON. ממיר טוב מרחיב אותן לערך המלא שלהן, כך שהנתונים נכונים אך הביטול-כפילות נעלם — JSON ל-YAML חזרה ל-JSON לא יבנה מחדש את העוגנים המקוריים. - הערות וסקלרים בבלוקים. הערות מוסרות במעבר ל-JSON. סקלרי בלוק רב-שורתיים (
|ו->) קורסים למחרוזות JSON רגילות עם escape של\n, כך שכוונת העיצוב החזותי אובדת. - הזחה בחזרה ל-YAML. ל-JSON אין קידוד להזחה, כך שהממיר בוחר סגנון עקבי. סקרו אותו לפני שאתם מדביקים אותו לכלי רגיש לטאבים.
למה מקומי-בלבד חשוב
קבצי קונפיגורציה ומטענים של API הם בדיוק סוג הדבר שלא צריך להיות מועלה לשרת אקראי: הם לעיתים קרובות נושאים שמות מארח, אסימונים, שמות שירות פנימיים, או נתוני לקוחות. הממיר הזה מריץ את שלב הניתוח וההפקה בדפדפן שלכם עם JavaScript. שום דבר לא נשלח לשרת אחורי, שום דבר לא נרשם, והכלי פועל אפילו לא מקוון ברגע שהעמוד נטען. הדביקו סוד של Kubernetes או זרימת עבודה של CI בביטחון שהם נשארים במחשב שלכם.
צריכים כלים קשורים? עיינו במלוא מגוון ממירי הנתונים, נקו קלט מבולגן עם מעצב ה-JSON, וחזרו לכאן בכל פעם שאתם צריכים לעבור בין עולם ה-API לעולם הקונפיגורציה.
שאלות נפוצות
האם הנתונים שלי מועלים לאיזשהו מקום?
לא. ההמרה מתבצעת כולה בדפדפן שלכם באמצעות JavaScript מקומי. ה-JSON או YAML שלכם לעולם לא נשלחים לשרת, כך שסודות וקבצי קונפיגורציה נשארים פרטיים.
למה ערך YAML שלי true או false השתנה באופן בלתי צפוי?
YAML 1.1 מתייחס למילים ללא מרכאות כמו yes, no, on, ו-off כבוליאנים — בעיית נורווגיה. עטפו כל ערך שאתם מתכוונים אליו כמחרוזת במרכאות כך שהוא ישרוד את ההמרה כטקסט.
מה קורה להערות שלי כשאני ממיר YAML ל-JSON?
ל-JSON אין תחביר הערות, כך שכל הערות ה-hash מוסרות במהלך ההמרה. אם אתם צריכים לשמר הערות, שמרו את העותק המוסמך שלכם ב-YAML.
האם עוגנים ואליאסים של YAML נשמרים?
הם מורחבים לערכים המלאים שלהם כי ל-JSON אין מנגנון הפניה. הנתונים נשארים נכונים, אך ביטול-הכפילות לא ניתן לשחזור כשאתם ממירים בחזרה ל-YAML.
האם אוכל להמיר JSON ל-YAML וגם YAML ל-JSON?
כן, הכלי עובד בשני הכיוונים. הדביקו JSON כדי לקבל YAML, או הדביקו YAML כדי לקבל JSON, והממיר מזהה ומייצר את הפורמט השני.
למה YAML נשבר כשאני משתמש בטאבים?
YAML דורש רווחים להזחה ודוחה טאבים. אם הדבקה נכשלת בניתוח, החליפו תווי טאב ברווחים ושמרו על הזחה עקבית.
