CSV ו-JSON: שתי דרכים לשאת את אותם הנתונים
רוב הנתונים הטבלאיים מסתיימים באחד משני פורמטים. CSV היא השפה הטבעית של גיליון האלקטרוני: קובץ טקסט פשוט שבו כל שורה היא רשומה ופסיקים מפרידים בין העמודות. JSON היא שפת ה-API והאפליקציות: פורמט טקסט מובנה הבנוי מאובייקטים (זוגות מפתח וערך) ומערכים (רשימות מסודרות). הן מתארות את אותו מידע בצורות שונות מאוד, וזו בדיוק הסיבה שהמרה ביניהן עולה כל כך הרבה. העמוד הזה מבצע את ההמרה בשני הכיוונים, כולו בתוך הדפדפן שלכם.
CSV מצטיין בכל מקום שבו רשת מרגישה טבעית. ייצוא דוח ממסד נתונים, הורדת רשימת הזמנות, או שמירת גיליון מ-Excel או Google Sheets, כמעט תמיד תקבלו CSV. הוא קומפקטי, קריא לבני אדם, וכל כלי אנליטיקה עלי אדמות יכול לפתוח אותו. JSON מצטיין בכל מקום שבו תוכנה מדברת עם תוכנה. ממשקי REST שולחים ומקבלים אותו, קבצי קונפיגורציה משתמשים בו, ו-JavaScript קורא אותו בלי שום ספריית ניתוח. כשאתם צריכים להזין ייצוא של גיליון אלקטרוני ל-API או למשוך תגובת API לתוך גיליון אלקטרוני, אתם למעשה מתרגמים בין שני העולמות האלה.

איך שורות וכותרות הופכות לאובייקטים
המיפוי פשוט יותר משהוא נראה. השורה הראשונה בקובץ CSV היא בדרך כלל שורת הכותרות, ושמות הכותרות האלה הופכים למפתחות ב-JSON. כל שורה שלאחר מכן הופכת לאובייקט אחד, שבו כל תא מזווג עם הכותרת המתאימה. הקובץ כולו הופך למערך של אותם אובייקטים. כך ש-CSV עם העמודות name,email,age הופך לרשימה כמו [{"name": "Ada", "email": "ada@example.com", "age": "36"}, ...]. בכיוון ההפוך, המרת JSON ל-CSV קוראת את המפתחות של האובייקט הראשון כדי לבנות את שורת הכותרות, ואז כותבת שורה אחת עבור כל אובייקט. זהו מסע הלוך ושוב נקי וצפוי כל עוד הנתונים שלכם באמת טבלאיים.
המלכודות ששווה להכיר
CSV נראה טריוויאלי אך מסתיר כמה קצוות חדים. הגדולה ביותר היא פסיקים בתוך שדה. אם כתובת מכילה "ברלין, גרמניה", פיצול תמים על פסיקים היה קורע ערך יחיד לשתי עמודות. תקן ה-CSV מטפל בזה על ידי עטיפת שדות כאלה במרכאות כפולות, ומרכאות בתוך שדה שבמרכאות מוכפלות (""). ממיר טוב מכבד את הכללים האלה כך שהנתונים שלכם לא עוברים עמודות בשקט. שימו לב גם למפריד: הרבה ייצוא אירופאי משתמש בנקודה-פסיק במקום פסיק, כי הפסיק כבר משמש שם כמפריד עשרוני. טאבים וקווים אנכיים מופיעים גם הם.
ההבדל העמוק יותר הוא סוגים. ל-CSV אין שום מושג של סוגי נתונים. הכל טקסט, כך שהמספר 42, הבוליאני true, ותא ריק כולם נראים כמחרוזות רגילות. JSON, לעומת זאת, מבחין בין מספרים, מחרוזות, בוליאנים, null, ומבנים מקוננים. כשאתם ממירים CSV ל-JSON, הערכים מגיעים כמחרוזות אלא אם הכלי מונחה לפרש מספרים ובוליאנים. המרת JSON ל-CSV סובלת מהבעיה ההפוכה: אובייקטים ומערכים מקוננים לא נכנסים בצורה מסודרת לרשת שטוחה, כך שהם בדרך כלל משוטחים או מומרים למחרוזת בתוך תא בודד. ידיעת זה מראש חוסכת לכם תהיות מאוחר יותר לגבי למה עמודה "נראית לא נכון".

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