ה-CSV האחרון שעלה לי אחר הצהריים היה ייצוא של 40 מגה-בייט מלקוח' חנות WooCommerce. לחצתי עליו פעמיים, אקסל החליט שעמודת ה-SKU היא תאריך, ו 2024-11-3 היה פתאום מה שהיה פעם 2024-11-3- חוץ מזה שזה היה 't, זה היה קוד מוצר. Excel כתב אותו מחדש בצורה מועילה. עד ששמנו לב, הקובץ "cleaned" הקובץ כבר יובא מחדש ולכמה מאות מוצרים היו מקט שלא הצביעו על כלום.
זו הבעיה עם פתיחת CSV ביישום גיליון אלקטרוני. גיליון אלקטרוני אינו צופה, it's עורך עם דעות. זה כופה טיפוסים, הוא מפשיט אפסים מובילים ממיקוד ומספרי טלפון, הוא מפרש מחדש כל דבר שנראה במעורפל כמו תאריך, והוא עושה את כל זה לפני שהסתכלת על שורה אחת. לפעמים אתה רק רוצה לראות הקובץ - בדוק את שמות העמודות, אשר את ספירת השורות, מצא את הרשומה ששברה את הייבוא, וצא.
אני בונה Toolz.dev וקראתי אנשים אחרים's CSV מייצא ללא הרף - תשלומי פסים, dump מסד נתונים, תמציות ניתוח, קבצי העברת תוספים. אז בניתי את מציג CSV להיות האפשרות המשעממת, הכנה: הוא מנתח את הקובץ, מראה לך בדיוק מה יש בו, ולא משנה כלום אין כפיה מסוג, אין תיקון אוטומטי, אין העלאה הדבק את הטקסט או שחרר את הקובץ, והוא מציג כטבלה שאתה יכול לחפש ולמיין.
TL;DR: מציג CSV מנתח טקסט מופרד ומעבד אותו כטבלה ללא עריכה או כפייה של ערכים. ה מציג CSV מזהה אוטומטית אם הקובץ שלך משתמש בפסיקים, נקודות פסיק, לשוניות או צינורות, ידיות RFC 4180 שדות מצוטטים (פסיקים ושורות חדשות בתוך תאים, מרכאות כפולות), מזהירים אותך מפני שורות מרופטות וכותרות כפולות, ומייצאים ל-CSV או JSON מנורמלים. הכל פועל בדפדפן שלך - הקובץ לעולם לא מועלה, והערכים נשארים מחרוזות כך שהאפסים המובילים שורדים.
מהו קובץ CSV, באמת?
CSV מייצג ערכים מופרדים בפסיקים, והשם הזה אחראי לעשור של באגים, מכיוון ששתיים משלוש המילים אינן אמינות.
הערכים לא תמיד מופרדים בפסיקים. מקומיים המשתמשים בפסיק כמפריד עשרוני - רוב יבשת אירופה - מייצאים עם נקודות פסיק במקום זאת, כי 1,50;2,75 הוא חד משמעי ו 1,50,2,75 לא. Excel במקום גרמני או צרפתי עושה זאת כברירת מחדל. Analytics וייצוא מסדי נתונים משתמשים לעתים קרובות בכרטיסיות, וצינורות יומן משתמשים לעתים קרובות בצינורות. כל אחד מאלה הוא עדיין בשפה הרווחת "CSV".
והערכים לא תמיד פשוטים ברגע שערך מכיל את המפריד, הפורמט זקוק לפתח מילוט, ו-RFC 4180 מספק אחד: עטוף את השדה במרכאות כפולות. בתוך המרכאות הללו, המפריד הוא רק תו. תו הציטוט עצמו נמלט על ידי הכפלתו. ושדה מצוטט עשוי להכיל מעברי שורות מילוליים, מה שאומר שרשומה לוגית אחת יכולה להשתרע על מספר שורות פיזיות בקובץ.
הנקודה האחרונה היא היכן מנתחים תמימים מתים אם הקוד שלך line.split(',')- וכתבתי את השורה הזו, וכך גם אתה - אז הקובץ הזה ישמיד אותה:
id,name,note
1,"Smith, John","He said ""hi""
on the second line"
2,Ada,plain
שלוש עמודות, שתי רשומות מנתח פיצול-על-פסיק רואה ארבעה שדות בשורה שתיים, נבהל על הציטוטים התועים, ומתייחס לשורה העטופה כאל רשומה שלישית מנתח תקין הולך על המחרוזת תו אחר תו, עוקב אחר האם היא נמצאת כרגע בתוך ציטוטים, ומייצר בדיוק את משמעות הקובץ. CSV Viewer עושה את הדבר השני.
תכונות עיקריות של מציג CSV
זיהוי מפריד אוטומטי
הדבק קובץ והכלי מנחש את המפריד לפני שהוא עושה משהו אחר הגישה הנאיבית היא לספור תווים ולבחור את השכיח ביותר, שנכשל מיד בפרוזה - א notes עמודה מלאה במשפטים באנגלית מכילה הרבה יותר פסיקים מאשר לקובץ מופרד בנקודה-פסיק יש נקודות-פסיק.
אז ציוני הזיהוי עקביות במקום תדירות היא לוקחת את עשר השורות הראשונות שאינן ריקות, סופרת כל מפריד מועמד (פסיק, נקודה-פסיק, לשונית, צינור) מחוץ לקטעים המצוטטים, ומתגמלת את המועמד שמייצר את אותה ספירה בכל שורה מפריד אמיתי מופיע בדיוק columns - 1 פעמים בשורה, כל שורה פסיק בתוך פרוזה מופיע באופן לא סדיר עקביות מנצחת, תדירות רק שוברת קשרים אם היא עדיין מנחשת לא נכון - וזה יקרה, בקבצים עם עמודה אחת - אתה יכול לעקוף אותה מהתפריט הנפתח.
RFC 4180 צוטט ניתוח שדה
המנתח הוא מכונת מצב ברמת תו, לא regex ולא פיצול. הוא עוקב אחר בוליאני אחד: האם אנחנו בתוך שדה מצוטט? בתוך ציטוטים, תוחמים ושורות חדשות הם תווים רגילים, וכפול "" פולט ציטוט מילולי יחיד ציטוטים מבחוץ, מפריד מסיים את השדה ושורה חדשה מסיימת את הרשומה. CRLF, LF, וסיומות קו CR חשופות כולם מתקבלים, מכיוון שיצוא Windows, ייצוא Unix ויצוא Mac ישן כולם קיימים וכולם מגיעים לאותה תיבת דואר נכנס.
זה ההבדל בין צופה שמראה לך Smith, John בתא אחד ואחד שמראה לך "Smith ו John" בשניים.
חפש בכל עמודה
תיבת החיפוש מסננת שורות עם תת-מחרוזת חסרת רישיות תואמת לכל תא בשורה. זה לא מטושטש, זו לא שפת שאילתה, וזה מכוון - כשאתה מחפש את הרשומה ששברה ייבוא, יש לך מזהה הזמנה או כתובת אימייל ואתה רוצה את השורה שמכילה אותו, מיד.
החיפוש פועל על הנתונים המנותחים בזיכרון, כך שהוא מיידי על קבצים בכל גודל שהדפדפן שלך יכול להחזיק, והוא מורכב עם מיון: סנן תחילה, מיין את התוצאה, ייצא את מה שנשאר.
מיון עמודות מודע למספרים
לחץ על כותרת עמודה כדי למיין לפי זה. זה נשמע טריוויאלי ולא, כי ל-CSV אין טיפוסים - כל ערך מגיע כמחרוזת, ומיון מחרוזות מעמיד 100 לפני 9 ו 2024-3-1 לפני 2024-11-1.
המיון בודק את הערכים: אם כל תא לא ריק בהשוואה מנתח כמספר (עם אלפי מפרידים מופשטים), הוא משווה מספרית. אחרת הוא נופל בחזרה להשוואת מחרוזת מודעת למקום עם איסוף מספרי, אז item2 ממיין לפני item10. תאים ריקים תמיד שוקעים לתחתית, בשני הכיוונים, כי ריק הוא לא ערך קטן - הוא חסר, והטמנת נתונים חסרים בחלק העליון של מיון יורד היא הדרך שבה אתה לא מצליח להבחין בו.
אזהרות איכות נתונים
שתי בעיות מבניות מסומנות לפני שאתה הולך רחוק יותר.
שורות מרופטות. אם בשורה יש יותר או פחות שדות מהכותרת, משהו לא בסדר במעלה הזרם: מפריד לא מצוטט בתוך ערך, ייצוא קטום, שורה חדשה תועה. הצופה מרפד שורות קצרות וקוטע שורות ארוכות כך שהטבלה עדיין מעבדת, ואז אומר לך בדיוק כמה שורות הושפעו. הספירה הזו היא המספר שאני בודק ראשון, כי לקובץ עם שלוש שורות מרופטות מתוך עשרת אלפים יש באג נתונים ש-a COPY לתוך Postgres יהיה משטח ב 3 בבוקר.
שכפל שמות עמודות. שני טורים שנקראו id יהיה בשקט לדרוס אחד את השני כמעט בכל צרכן במורד הזרם - פנדות יהיה לשנות את שמם, המרה JSON ישמור רק האחרון, ו ייבוא SQL יהיה שגיאה הצופה שמות אותם באנר אזהרה כך שתוכל לתקן את הכותרת לפני שזה משנה.
ייצוא CSV ו-JSON
חלונית הייצוא מסדרת מחדש את כל מה שנמצא כעת על המסך - מסונן, ממוין, מה שעשית. ייצוא ה-CSV מחיל ציטוט נכון של RFC 4180 בדרך החוצה, מה שהופך אותו לדרך הגונה לנרמל קובץ שהגיע עם ציטוט לא עקבי. ייצוא JSON ממיר את הטבלה למערך של אובייקטים עם מקשים על ידי שורת הכותרת, וזה מה שאתה רוצה כשאתה מזין סקריפט או API.
בחירה מכוונת אחת: ערכים מיוצאים נשארים מחרוזות. "01234" לא הופך 1234. עמודת CSV מלאה בספרות עשויה להיות כמות, או שהיא עשויה להיות מיקוד, מספר חשבון, מספר טלפון או מקט - ואין דרך לדעת מהנתונים. כפייה למספרים זורקת אפסים מובילים לצמיתות, שזה הבאג המדויק שהתחיל את המאמר הזה. אם אתה רוצה מספרים, הטילו אותם במפורש בצד השני, שם אתה יודע מה המשמעות של העמודה.
זה פועל כולו בדפדפן שלך
הקובץ נקרא עם ה FileReader API ומנתח ב - JavaScript.שום דבר לא מועלה, לא נרשמת שאילתת חיפוש, אין נתונים נוגעים בשרת זו לא הבטחת מדיניות, זו עובדה ארכיטקטונית שאתה יכול לאמת על ידי פתיחת DevTools' כרטיסיית רשת בזמן שאתה משתמש בכלי, או על ידי משיכת ה - Wi-Fi שלך וצפייה בו ממשיכים לעבוד.
זה משנה יותר ממה שזה נשמע רוב קבצי CSV שווה להסתכל מכילים משהו שאתה לא היה להדביק לתוך זר's אתר: הודעות דואל של לקוחות, נתוני שכר, היסטוריות הזמנות, ייצוא ממסד נתונים ייצור אם אתה עובד תחת GDPR, HIPAA, או לקוח NDA, " הדבקתי אותו לתוך ממיר מקוון" הוא לא משפט שאתה רוצה לומר בקול רם כתבתי יותר על מודל האיום הזה ב מדוע כלים בצד הלקוח מנצחים ממירי ענן.
כיצד להשתמש ב-CSV Viewer
שלב 1: טען את הקובץ
שתי דרכים פנימה הדבק את טקסט CSV ישר לתוך תיבת הקלט - טוב עבור קטע מתוך יומן, הודעת Slack, או תגובת API שברצונך לגלגל עין. או לחץ העלה קובץ ולבחור א .csv, .tsv, או .txt קובץ מהמכונה שלך הקובץ נקרא באופן מקומי; כפתור ההעלאה הוא קובץ פיקר, לא העלאה.
אם אתה מדביק מגיליון אלקטרוני, שים לב שרוב יישומי הגיליון האלקטרוני שמים טקסט מופרד בכרטיסיות על הלוח, לא פסיקים. הגדר את המפריד ל-Tab, או השאר אותו ב-Auto ותן לזיהוי לטפל בו.
שלב 2: בדוק את הגדרות הניתוח
שלוש הגדרות, וברירות המחדל נכונות רוב הזמן.
מפריד הוא אוטומטי כברירת מחדל. עקוף אותו אם לקובץ שלך יש עמודה אחת, או אם הזיהוי מנחש שגוי בדגימה קטנה.
שורה ראשונה היא כותרת מופעל כבה אותו עבור קבצים ללא כותרות - העמודות הופכות Column 1, Column 2, וכן הלאה, ואין שורה נצרך.
לקצץ רווח לבן הוא על, אשר רצועות מובילים ונגררים רווחים מכל תא זה בדרך כלל מה שאתה רוצה, מאז , לאחר מפריד נפוץ ביותר ב-CSVs בכתב יד. כבה אותו אם לנתונים שלך יש רווחים מובילים משמעותיים, כגון שדות ברוחב קבוע שהושלכו ל-CSV.
שלב 3: קרא את הטבלה
מכה הצג כטבלה ואתה מקבל את הרשת המנותחת בתוספת שורת סטטיסטיקה: כמה שורות נראות מתוך כמה סך הכל, כמה עמודות, באיזה מפריד נעשה שימוש וכמה עמודות הן מספריות לחלוטין. הספירה המספרית הזו היא בדיקת שפיות מהירה - אם עמודה שאתה מצפה שתהיה מספרית לא נספרת, שורה כלשהי בה מכילה אי-מספר, ובדרך כלל השורה היא שתשבור את הייבוא שלך.
חיפוש מסנן שורות. clicking a header sorts.The two compose.
שלב 4: ייצוא או המשך הלאה
העתק את הטבלה הנראית כ-JSON, הורד אותה כ-CSV, או הורד אותה כ-JSON. מסננים ומיון מוחלים על הייצוא, אז "חפש refunded, מיין לפי תאריך, הורד CSV" נותן לך בדיוק את תת-הקבוצה הזו.
איך זה בהשוואה לדרכים אחרות לפתיחת CSV?
| גישה | כופה את הנתונים שלך | מטפל בשדות מצוטטים | עובד במצב לא מקוון | שולח נתונים לכל מקום | טוב ל |
|---|---|---|---|---|---|
| CSV Viewer (Toolz.dev) | לא | כן (RFC 4180) | כן | לא | בדיקה, חיפוש, בדיקת שפיות, המרה ל-JSON |
| אקסל / Google Sheets | כן - תאריכים, אפסים מובילים, סימון מדעי | כן | אקסל כן, גיליונות לא | גיליונות מעלים ל-Google | עריכה, נוסחאות, תרשימים |
| עורך טקסט | לא | לא - אתה מנתח את זה בראש שלך | כן | לא | קבצים זעירים, בדיקת סיומות שורות |
csvkit / xsv / DuckDB CLI |
לא | כן | כן | לא | קבצים ענקיים, סקריפטים, הצטרפות, צבירה |
פנדות read_csv |
כן, כברירת מחדל (dtype=str כדי לעצור את זה) |
כן | כן | לא | ניתוח, צינורות טרנספורמציה |
| ביותר "online CSV viewer" אתרים | משתנה | בדרך כלל | לא | כן - הועלה לשרת שלהם | שום דבר שאכפת לך ממנו |
הסיכום הכנה: לקבצים מעל כמה מאות מגה, השתמש ב-DuckDB או xsv- דפדפן מנתח את כל הקובץ לזיכרון במעבר אחד ואין דרך לעקוף את זה לכל דבר שאתה צריך לערוך עם נוסחאות, להשתמש בגיליון אלקטרוני ולקבל את הכפייה, או לייבא כטקסט לכל מה שביניהם - היומי " מה בעצם יש בקובץ הזה, ולמה שורה 4,201 break" - צופה שלא משנה כלום הוא הכלי הנכון.
מקרי שימוש נפוצים
איתור באגים ביבוא כושל
ייבוא CSV נכשל עם " צפוי 8 עמודות, קיבל 9 בשורה 4201". פתח את הקובץ בצופה, בדוק את אזהרת השורה המרופטת, ואז חפש ערך שאתה יודע שנמצא ברשומה זו. תשע פעמים מתוך עשר תמצא פסיק לא מצוטט בתוך כתובת או שם חברה - Acme, Inc. נכתב ללא ציטוטים עכשיו אתה יודע אם לתקן את הייצוא או לעבד מראש את הקובץ.
סקירת ייצוא מסד נתונים לפני שהוא הולך לשום מקום
לפני לקוח's נתונים עוזב את המחשב הנייד שלך, אתה רוצה לדעת מה יש בו. Column שמות, ספירת שורות, האם ה email העמודה מאוכלסת במלואה, בין אם יש מזהים כפולים. שורת הנתונים הסטטיסטיים והספירות המלאות/ייחודיות עונות על כל זה תוך כעשר שניות, מבלי שהקובץ יגיע לשרת.
המרת CSV ל-JSON עבור API או סקריפט
יש לך גיליון אלקטרוני של רשומות ואתה צריך אותם כמו JSON כדי זרע מסד נתונים, הזנת נקודת קצה REST, או לבנות קובץ fixure.הדבק, לנתח, לייצא JSON.אם אתה צריך את הנסיעה לאחור, ה CSV ל-JSON ו JSON ל-CSV כלים מטפלים בהמרה ייעודית עם אפשרויות נוספות, ועברתי על בעיית הלוך ושוב בפירוט ב מדריך המרות JSON ל-CSV.
בדיקת יצוא אירופאי שנפתח כעמודה אחת
לקוח שולח ייצוא מהתקנה גרמנית של Excel וכל שורה היא מחרוזת אחת ארוכה. הגדר את המפריד לנקודה-פסיק והוא נצמד לעמודות. זה לוקח ארבע שניות ושווה לדעת עליו, כי הרפלקס " הקובץ פגום" שגוי - הקובץ בסדר, המנתח שלך' ההנחה לא הייתה.
ביקורת אנליטיקה או ייצוא פלטפורמת מודעות
ייצוא GA4, Google Ads ו-Meta מגיע כ-CSV עם שורות מטא נתונים מעל הכותרת בפועל. כבה את " השורה הראשונה היא header", הסתכל על הצורה, ותראה בדיוק באיזו שורה הכותרת האמיתית יושבת - ואז מחק את שורות הזבל מתיבת ההדבקה ונתח מחדש.
צלילה טכנית לעומק: כללי הניתוח החשובים למעשה
RFC 4180 הוא תיאור, לא תקן שמישהו אוכף. הוא פורסם בשנת 2005 כדי לתעד את מה שיישומי CSV כבר עשו, והוא מציין במפורש שרבים שונים. התייחס אליו כאל קו הבסיס השפוי, לא כערובה לגבי קובץ שנשלחת.
כללי ציטוט. שדה עשוי להיות עטוף במרכאות כפולות. בתוך מרכאות, תוחמים, CR, LF ומרכאות כפולות ("" → ") הם מילוליים ציטוט המופיע באמצע שדה לא מצוטט הוא דו משמעי - הצופה מתייחס לציטוט כמשמעותי רק כאשר הציטוט הוא התו הראשון של השדה, וכך מתנהגים רוב המנתחים האמיתיים ואשר מאפשר לערכים לאהוב 6" nails לשרוד.
סיומי שורות. CRLF זה מה שהמפרט אומר. LF זה מה שיוניקס מייצרת CR חשוף זה מה שיצרה תוכנת Mac ישנה מאוד ומה שכמה מערכות משובצות עדיין מייצרות המנתח מקבל את שלושתם, כולל סופים מעורבים בתוך קובץ אחד, כי סופים מעורבים קורים לחלוטין כאשר קבצים נערכים על שני מכונות.
הbom. קבצי UTF-8 שנכתבו על ידי Excel מתחילים בסימן סדר בתים, EF BB BF. אם שם העמודה הראשונה שלך נראה כמו id אלא השוואת מחרוזת מול "id" נכשל, ה-BOM הבלתי נראה הזה רוכב בחזיתו. זהו ה-" הנפוץ ביותר; מדוע חיפוש הכותרות שלי נכשל" באג בטיפול ב-CSV.
קווים חדשים נגררים. לקובץ המסתיים בשורה חדשה אין רשומה ריקה נוספת - השורה החדשה מסיימת את הרשומה האחרונה. האפשרות viewer's דילוג על שורות ריקות הופכת את זה ללא בעיה בכל מקרה.
הסקת סוג. יש 't any. CSV אין סוגים כל ערך בקובץ הוא מחרוזת, וכל סוג שאתה מקבל החוצה הצד השני הומצא על ידי המנתח שלך מבוסס על ניחוש זה לא פגם בפורמט, זה הפורמט 's כל הטבע - וזו הסיבה הצופה אף פעם לא מנחש בשמך.
שָׁוא
איך אני פותח קובץ CSV ללא Excel?
העלה את הקובץ ל- מציג CSV או הדבק את תוכנו בתיבת הקלט הקובץ מנותח בדפדפן שלך ומוצג כטבלה שתוכל לחפש ולמיין אין תוכנת גיליון אלקטרוני, אין התקנה ואין העלאה לשרת.
מדוע ה-CSV שלי נפתח כעמודה אחת ארוכה?
המפריד אינו תואם. קבצים המיוצאים באזורים המשתמשים בפסיק כמפריד העשרוני משתמשים בדרך כלל בנקודה-פסיק בין שדות, ובכרטיסיות ייצוא מופרדות בכרטיסיות. העבר את הגדרת המפריד מאוטו לנקודה-פסיק, Tab או Pipe והעמודות יתפצלו כהלכה.
האם הצופה מטפל בפסיקים בתוך שדות מצוטטים?
כן. המנתח עוקב אחר RFC 4180: שדה עטוף במירכאות כפולות יכול להכיל תוחמים, מעברי שורות וציטוטים נמלטים הכתובים כשתי מרכאות כפולות ברציפות. ערך כמו "Smith, John" נשאר בתא אחד במקום להתפצל לשניים.
מה ההבדל בין CSV ל-TSV?
הם משתמשים במפרידי שדות שונים - CSV מפריד עם פסיקים, TSV עם תווי כרטיסיות. TSV צריך פחות ציטוט מכיוון שכרטיסיות מתרחשות רק לעתים רחוקות בתוך ערכי נתונים, וזו הסיבה שיצוא מסדי נתונים וניתוח מעדיף זאת לעתים קרובות. מציג זה קורא את שניהם; בחר Tab כמפריד עבור קבצי TSV.
מה עושה את "שורות מרופטות" אזהרה אומרת?
לשורה יש יותר או פחות שדות מאשר שורת הכותרת. זה בדרך כלל אומר מפריד לא מצוטט בתוך ערך, ייצוא קטוע או שדה המכיל מעבר קו תועה. הצופה מרפד שורות קצרות וחותך שורות ארוכות כך שהטבלה עדיין מתבטאת, ומספר לך כמה שורות הושפעו.
האם יש מגבלת גודל קובץ?
המגבלה המעשית היא זיכרון הדפדפן שלך, מכיוון שהקובץ כולו מנותח במעבר JavaScript בודד. קבצים עד כמה עשרות מגה-בייט הם בסדר במחשב נייד טיפוסי. עבור ייצוא מרובה ג'יגה-בייט, השתמש בכלי סטרימינג כגון CSVKit, DuckDB או Pandas עם ChunkSize במקום זאת.
האם אני יכול להמיר את ה-CSV ל-JSON?
כן. החלונית Export ממירה את הטבלה המנותחת למערך של אובייקטי JSON עם מקשים על ידי שורת הכותרת, אותם תוכל להעתיק או להוריד. ערכים נשארים כמחרוזות לפי עיצוב - כפייה שלהם למספרים תפשיט אפסים מובילים ממזהים, מיקודים ומספרי טלפון.
האם זה בטוח לפתוח כאן CSV סודי?
כן. הניתוח פועל כולו בדפדפן שלך באמצעות JavaScript ו-FileReader API. שום שאילתת קובץ, תא או חיפוש לא מועברת לשרת או מתועדת. אתה יכול לאמת זאת על ידי פתיחת הכרטיסייה רשת DevTools של הדפדפן בזמן השימוש בכלי, או על ידי ניתוק מהאינטרנט.
כלים קשורים
- CSV ל-JSON- המרה ייעודית עם אפשרויות סוג
- JSON ל-CSV- הנסיעה חזרה, כולל השטחת חפצים מקוננים
- XML ל-JSON- ליצוא שמגיע כ-XML במקום
- פורמט JSON- נקה את ה-JSON שזה עתה ייצאת
- JSON Diff- השוו בין שני יצוא ומצאו מה השתנה
קריאה נוספת: המדריך האולטימטיבי לכלי JSON ו המרת JSON ל-CSV.



