נתונים

CSV, JSON ו-YAML

שלושה פורמטים נושאים את רוב הנתונים המובנים בעולם. ההמרה ביניהם קלה; המרה ביניהם בלי לשבש משהו בשקט דורשת מעט זהירות.

פורסם ב-

למה כל אחד מיועד

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

מלכודת המרת הטיפוסים

זו הבעיה שבאמת עולה לאנשים כסף. CSV מכיל רק טקסט — אין דרך לסמן ערך כמספר, כתאריך או כמחרוזת. לכן ממירים מנחשים, והניחושים שגויים לעיתים קרובות:

  • מיקוד כמו 01234 הופך למספר 1234 ומאבד את האפס המוביל.
  • קוד מוצר כמו 1-2 הופך לתאריך.
  • מספר חשבון ארוך הופך לנקודה צפה ומאבד את הספרות האחרונות שלו.
  • NA, שמשמעותו צפון אמריקה, הופך ל״לא זמין״.

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

מה לא שורד את הדרך ל-CSV

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

הקצוות החדים של YAML

YAML נעים לקריאה וקל במיוחד לטעות בו.

  • הזחה היא מבנה, וטאבים אינם מותרים. רווח שהוצב לא נכון משנה את המשמעות במקום לגרום לשגיאה.
  • חלק מהמילים הגלויות הן ערכים בוליאניים. ב-YAML ישן, y, n, on, off, yes ו-no מתנתחים כולם כ-true או false — כך שעמודת מדינות שמכילה NO עבור נורווגיה הופכת ל-false. יש לעטוף אותם במרכאות.
  • הערות נעלמות בהמרה ל-JSON, כי ל-JSON אין דרך לייצג אותן.

המרה הלוך ושוב אינה מובטחת

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

כדי לעבור ביניהם: המרת CSV ל-JSON, המרת JSON ל-CSV, או המרת JSON ל-YAML — ולבדוק את התוצאה, כי המרה הלוך ושוב אינה תמיד מדויקת.