← speedor.net

ממירי נתונים

ממירי פורמט נתונים חינמיים: CSV ↔ JSON, JSON ↔ YAML ו-JSON ↔ XML. מיידי, פרטי, ישירות בדפדפן שלך.

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

העברת נתונים בין CSV, JSON, YAML ו-XML

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

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

במה כל פורמט באמת טוב

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

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

JSON הוא שפת הלינגואה פרנקה של האינטרנט המודרני. כמעט כל API שתקראו אי פעם מדבר אותה. JSON מטפל בקינון, מערכים, וכמה סוגים אמיתיים (מחרוזות, מספרים, בוליאנים, null), מה שהופך אותו לביטוי-עשיר בהרבה מטבלה שטוחה. הוא קומפקטי, ידידותי למכונה, ונתמך בכל מקום.

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

XML הוא ותיק הקבוצה. מנופח, עמוס תגיות, ועדיין שקוע עמוק במערכות ארגוניות, שירותי SOAP, מסרים פיננסיים, ותקני מסמכים כמו RSS. תפגשו בו פחות בפרויקטים חדשים, אבל כשבאמת צריכים אותו, ממש צריכים.

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

איפה המרות באמת קורות

התרחישים די קונקרטיים ברגע שמתחילים להסתכל. נניח שהשיווק מוסר לכם גיליון של 4,000 אנשי קשר וה-API להרשמה מקבל רק מערך JSON. אתם מייצאים את הגיליון ל-CSV, מעבירים אותו דרך CSV ל-JSON, ויש לכם מטען מוכן ל-POST. ללא סקריפט דבק, ללא pandas, ללא המתנה למהנדס.

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

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

המהמורות שכדאי לדעת עליהן

המרת פורמט לא תמיד ללא אובדן, ולהעמיד פנים אחרת מוביל לבאגים. כמה דברים לזכור:

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

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

XML ו-JSON לא ממופים בצורה נקייה. ל-JSON יש מערכים; ל-XML יש אלמנטים חוזרים. ל-JSON אין תכונות (attributes) בשום מקום; ל-XML יש בכל מקום. רוב הממירים בוחרים מוסכמה סבירה, אבל אם ה-XML שלכם משתמש בתכונות בכבדות, ה-JSON שהוא מייצר ייראה קצת שונה מ-JSON כתוב ביד. זה צפוי, לא פגם.

עומק הקינון חשוב. CSV שטוח, אז JSON מקונן עמוק לא תמיד יכול להתכווץ לעמודות בלי לשטח מפתחות (חשבו address.city). בכיוון ההפוך, CSV שטוח הופך למערך שטוח, לעולם לא לעץ.

שורות של טבלת נתונים זוהרת המשתנות לעץ מקונן של סוגריים בנייבי, ציאן וזהב
שורות שטוחות נפתחות לעץ מקונן: אותן רשומות, צורה עשירה יותר.

למה מקומי-בלבד חשוב כאן

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

שאלות נפוצות

האם הנתונים שלי מועלים לאיזשהו מקום כשאני ממיר אותם?

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

האם אפשר להמיר CSV ל-JSON בלי לכתוב שום קוד?

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

למה ה-JSON הממומר שלי מציג מספרים כמחרוזות?

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

מה ההבדל בין JSON ל-YAML?

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

האם המרה בין הפורמטים האלה תמיד ללא אובדן?

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

האם הממירים האלה עובדים על קבצים גדולים?

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