Command Palette

Search for a command to run...

CSV ל-JSON: הסקת הסוג תאכל את המיקודים שלך

CSV ל-JSON: הסקת הסוג תאכל את המיקודים שלך

T
Toolz Team
|Jul 7, 2026|16 קריאה דקות

חלק מאוסף כלי נתונים

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

07102 הפך 7102. כל zip שמתחיל באפס, על פני כל הקובץ, קטוע בשקט. לא על ידי באג - על ידי תכונה. סוג מסקנות הסתכל 07102, ראה משהו שתאם את " מספר," והמיר אותו בעזרה לאחד. אפסים מובילים הם לא דבר שיש למספרים.

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

TL;DR: ה ממיר CSV ל-JSON הופך CSV למערך של אובייקטים, באמצעות השורה הראשונה כמקשים, פועל כולו בדפדפן שלך. זה תמיד מסיק טיפוסים ואתה יכול 't לכבות את זה בממשק המשתמש - מה שאומר 071027102, 1250.501250.5, תאים ריקים → null, ו true/false → בוליאנים. מספרים שלמים גדולים מעבר ל-25³ stay strings, מה ששומר את מזהי הטוויטר שלך. זה 's פסיק בלבד בממשק, אז CSVs נקודה-פסיק מ-European Excel זכו't לנתח. כותרות כפולות הן שגיאה קשה ולא החלפה שקטה - שאחד ' הוא שיפור אמיתי ביחס לרוב המנתחים. בדוק את הפלט לפני שאתה מייבא, והשתמש ב פורמט JSON לגלגל את זה.


מה הממיר הזה באמת עושה לנתונים שלך?

כל ערך ב-CSV הוא טקסט. 29 האם הדמויות 2 ו 9. ל-JSON יש סוגים אמיתיים, אז ממיר צריך להחליט: הוא 29 המספר 29 או המחרוזת "29"? There's אין תשובה נכונה באופן כללי, וכל מנתח CSV מנחש.

זה מנחש. Always. Here's ערכת הכללים המלאה, היישר מהקוד ומאומתת על ידי הפעלתו:

ערך CSV פלט JSON סוג
29 29 מספר
07102 7102 מספר - אפס נעלם
1250.50 1250.5 מספר - סנט נעלם
true / TRUE true בוליאנית
null / NIL null ריק
(תא ריק) null ריק
9007199254740993 "9007199254740993" מיתר
1e3 1000 מספר
+5 "+5" מיתר
.5 ".5" מיתר
NO "NO" מיתר
+8801712345678 "+8801712345678" מיתר
2024-01-05 "2024-01-05" מיתר

כמה מהם ראויים לבדיקה מקרוב, כי הדפוס הוא 't ברור.

המספר regex קפדני, וזה ' נושא עומס. זה תואם ^-?\d+$ ושום דבר אחר. That's למה +5 ו .5 לשרוד כמחרוזות - ללא יתרון מוביל, ללא נקודה עשרונית חשופה. It's גם למה +8801712345678- מספר טלפון בנגלדשי, ואני בודק עם שלי - מגיע דרך שלם. Strip ש + ואתה 'd לאבד את זה להמרה מספרית. אז ההקפדה של regex היא בטעות הגנה על מספרי טלפון, ורק מספרי טלפון ששמרו על קוד המדינה שלהם פלוס.

מספרים שלמים גדולים מטופלים נכון, מה שהפתיע אותי. כל דבר מחוץ ל-JavaScript' טווח מספרים שלמים בטוחים (±25³−1) נשמר בכוונה כמחרוזת במקום מומר ומעוות. מזהי פתיתי שלג, מזהי טוויטר ומפתחות מסד נתונים בני 19 ספרות שורדים. רוב הממירים הנאיביים מתקשרים parseInt ותמסור לך 9007199254740992 איפה שהיה לך ...93. זה בודק קודם את הכבול.

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

ריק פירושו אפס, לא מחרוזת ריקה. והנה's באג תיעוד קטן שמצאתי כותב את זה: הכלי's הבעלים של "איך זה עובד" אומר פאנל " ערכים ריקים נשמרים כמחרוזות ריקות בפלט JSON." הם 't. inferType('') החזרות null. טקסט ממשק המשתמש שגוי; הקוד הוא מה שנשלח. I'm תיקון העותק.


מדוע 07102 הופך ל-7102, ומה אני עושה בנידון?

כי מיקוד הוא לא מספר ומחשב יכול't tell.

07102 התאמות "ספרות, אופציונלי שלילי" באופן מושלם. parseInt("07102", 10) הוא 7102. האפס המוביל נשא משמעות - זה היה לנתונים - ולמספרים אין דרך להחזיק אותם קורה אותו דבר ל:

  • מיקודים: 07102, 01950, כל דבר בניו אינגלנד או ניו ג'רזי
  • מקט מוצרים: 00451
  • מספרי טלפון ללא פלוס: 0171...
  • קודי בנק/ניתוב, תעודות עובד, כל מזהה מרופד
  • כסף Money: 1250.501250.5, ו 2100.002100

עם האחרון הזה שווה לשבת. 1250.50 ו 1250.5 הם אותו מספר ומחרוזת אחרת. אם אתה 're עיבוד מטבע במורד הזרם, $1250.5 עומד להופיע בממשק משתמש איפשהו, ומישהו יגיש באג שלוקח שעה להתחקות אחר המרת CSV שלושה שבועות קודם לכן. (הלקח האמיתי שיש לאחסן כסף כסנטים שלמים או כמחרוזת עשרונית, אף פעם לא צף - אבל זה' נלחם על מאמר אחר.)

כרגע, בכלי הזה, יש אין להחליף כדי לכבות את ההסקה. הפונקציה הבסיסית לוקחת א inferTypes אפשרות וממשק המשתמש לעולם לא עוברים אותה, אז זה ' פועל, לצמיתות, כברירת מחדל. That's פער, וזה 's הפריט העליון ברשימה שלי עבור כלי זה.

עד שהוא נשלח, האפשרויות שלך:

  1. תסתכל על הפלט. ברצינות - זו הסיבה שהכלי מציג את JSON בחלונית במקום רק להוריד אותו. סרוק את עמודות הזיהוי שלך. זה לוקח עשר שניות וזה 's איך הייתי צריך לתפוס את המיקודים.
  2. ציטוט-הוכחה זה במעלה הזרם. ציטוט ב-CSV won't עזרה - המנתח מפשיט ציטוטים ו ואז מסיק, אז "07102" עדיין הופך 7102. במקום זאת, הפוך את הערך ללא מספרי במקור: ייצוא כ ZIP-07102, או הוסף עמודת קידומת בגיליון האלקטרוני.
  3. לאחר תהליך. המר, ואז תקן את העמודות שאתה יודע שהן מזהים: data.forEach(r => r.zip = String(r.zip).padStart(5, '0')). מכוער, אבל ישר וניתן לביקורת.
  4. השתמש במנתח אמיתי עבור צינורות אמיתיים. לכל דבר מתוזמן או אוטומטי, csv-parse או Papa Parse ב-Node עם cast: false יעשה זאת כראוי כלי דפדפן הוא עבור חד פעמי.

מה מקבל המנתח נכון?

I' התקשה עם זה, אז הנה' זה החצי השני - וחלק מזה באמת טוב יותר ממה שאתה ' תמצא במקום אחר.

כותרות כפולות הן שגיאה קשה. להאכיל אותו a,b,a וזה מסרב: Duplicate headers found: a. רוב המנתחים נותנים בשקט לעמודה האחרונה לנצח, כך שעמודה של נתונים נעלמת ללא מילה. כשלו בקול רם הנה הקריאה הנכונה - לא ניתן להחזיק שני מפתחות עם אותו שם באובייקט JSON, והעמדת פנים אחרת מאבדת נתונים.

שדות מצוטטים מטופלים כראוי, לכל RFC 4180. פסיקים בתוך ציטוטים הישארו במקום; "" הופך למילולית ". הנתונים לדוגמה נשלחים עם "Mike, Jr." במיוחד כדי להוכיח את זה.

קווים חדשים בתוך שדות מצוטטים עובדים. זה המקום שבו פיצול CSV מגולגל ביד מת בדרך כלל - מישהו מתפצל \n ושדה כתובת רב-שורה מפוצץ את כל הקובץ מסלולי מפצל השורות מצטטים מצב תו אחר תו, אז "line1\nline2" נשאר שדה אחד.

מדלגים על קווים ריקים, אז קווים חדשים נגררים והשורה הריקה התועה שאקסל משאיר בסוף don' לא מייצרים אובייקטי פנטום.

שורות מרופטות don't crash. מעט מדי שדות והמפתחות החסרים חוזרים null; יותר מדי והתוספות שעברו את ספירת הכותרות שלך נשמטות בשקט. (החלק האחרון הזה I'd קורא לוויכוח ולא נכון - אזהרה תהיה טובה יותר מאשר השלכה שקטה.)

סטיית RFC אחת שכדאי לדעת עליה: הערכים נחתכים, כולל ציטוטים פנימיים. RFC 4180 §2.4 אומר שרווחים הם חלק מהשדה ויש להתעלם מ-' אז " John " צריך להיות " John ". הכלי הזה נותן לך "John". That's נוחות מכוונת - 99% מהזמן נגרר רווח לבן ב-CSV הוא תאונה שאתה רוצה להיעלם - אבל אם אתה 'היו נתונים הלוך ושוב שבהם הריפוד משמעותי, זה ' הוא צעד אובד והמפרט אינו בצד שלי.


למה Won't My Semicolon CSV Parse?

כי הממשק הוא פסיק בלבד, וזה תופס כל ייצוא אירופאי.

Excel במקום שמשתמש בפסיק כאשר המפריד העשרוני כותב CSVs עם נקודה פסיק כמפריד השדה. תקף לחלוטין, נפוץ ביותר, וכלי זה לא ינתח אותו. הדבק a;b ואתה מקבל מפתח בודד בשם מילולי a;b עם הערך "1;2". It does 't error - זה רק מייצר עמודה אחת חסרת תועלת, שהיא גרועה יותר משגיאה.

פונקציית הניתוח מקבלת א delimiter אפשרות ממשק המשתמש לעולם לא חושף אותו. אותו סוג של פער כמו החלפת ההסקה.

דרכים לעקיפת הבעיה:

  • מצא והחלף ;, בעורך טקסט תחילה - בטוח רק אם אף שדה לא מכיל פסיק בתוך מרכאות.
  • ייצוא חוזר מ-Excel עם "CSV UTF-8 (תוחם בפסיק)".
  • השתמש ב מציג CSV במקום זאת - הוא אכן מפריד זיהוי על ידי ניקוד עקביות ספירת עמודות על פני מפרידים מועמדים, כך שהוא יקרא את קובץ הנקודה-פסיק שלך. זה זכה 't להמיר ל-JSON, אבל זה ' יראה לך מה יש לך.

ללשוניות יש אותה בעיה. כך גם מופרד בצינור.


כיצד אוכל להמיר CSV ל-JSON ב-Toolz.dev?

שלב 1: פתח את הממיר

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

שלב 2: הדבק את ה-CSV שלך

הדבק בחלונית השמאלית. שם's אין העלאת קובץ- it's אזור טקסט, אז פתח את שלך .csv בעורך טקסט והעתק אותו לרוחב. לכמה אלפי שורות ש-' בסדר. לייצוא של 200 מגה-בייט, השתמש במנתח אמיתי.

השורה הראשונה שלך חייבת להיות כותרות, ואתה צריך לפחות שורת נתונים אחת שורה אחת חוזרת CSV must have at least a header row and one data row.

שלב 3: המר

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

שלב 4: קרא את הפלט לפני שאתה סומך עליו

השלב שכולם מדלגים ודילגתי פעם אחת תסתכל על עמודות הזיהוי שלך תסתכל על עמודות הכסף שלך אם מיקוד מופיע ללא ציטוט ב-JSON, it's מספר עכשיו.

שלב 5: העתק או הורד

לְהַ ללוח, הורד את JSON עבור א data.json קובץ.


מתי אסור להשתמש בממיר דפדפן?

להיות כנה לגבי הגבול:

מצב להשתמש
חד פעמי, כמה אלפי שורות CSV ל-JSON
נתונים רגישים שאתה יכול't להעלות זה - זה אף פעם לא עוזב את הדפדפן שלך
כל דבר מתוזמן או אוטומטי csv-parse / Papa Parse בצומת
נקודה-פסיק או כרטיסייה מופרדים מציג CSV, או לתקן את המפריד
מיקודים, מקט, תעודות זהות מרופדות כל דבר עם cast: false
פלט מקונן מכותרות מנוקדות תסריט - זה מייצר אובייקטים שטוחים בלבד
100k+ שורות מנתח סטרימינג; הדפדפן מחזיק הכל בזיכרון
הולך לכיוון השני JSON ל-CSV

זה " פלט מקונן" שורה שווה לציין בבירור מכיוון שגרסאות ישנות יותר של מדריך זה טענו אחרת: כותרות כמו user.name ו address.city לעשות לא הופכים לאובייקטים מקוננים מקבלים אובייקט שטוח עם מפתח שממש נקרא "user.name". There's אין הרחבת סימון נקודות, אין טרנספורמציה של כותרת, אין המרת camelCase. אובייקטים שטוחים, מקשים בדיוק כפי שהוקלדו בשורת הכותרת שלך - רווחים, גיבובים והכל. כותרת של Order # נותן לך מפתח של "Order #", שהוא JSON חוקי ו-JavaScript מביך (row["Order #"]).

הסיבה להגיע לכלי זה היא אותה סיבה כמו שאר האתר: הנתונים שלך 't go anywhere.If you're המרת יצוא לקוח עם שמות אמיתיים ומיילים בו, that's not a small thing - הדבקתו לתוך ממיר בצד השרת פירושה מסירת צד שלישי קובץ של נתונים אישיים, שהיא שיחה עם DPO שלך you' different not have.Here הניתוח פועל בכרטיסייה שלך כבה את ה-Wi-Fi שלך וזה עדיין עובד.


שאלות נפוצות

למה המיקוד שלי איבד את האפס המוביל שלו?

מכיוון שהסקת סוג המירה אותו למספר, ומספרים יכולים' לא לאחסן אפסים מובילים. 07102 תואם את "digits only" דפוס, כך שהוא הופך 7102. זה משפיע על מיקודים, מקט מרופד, מזהי עובדים וכל מזהה שבמקרה הוא כולו ספרות. ציטוט זה ב-CSV won' עזרה - ציטוטים מופשטים לפני ריצות מסקנות. בדוק את עמודות הזיהוי שלך בפלט, או קידומת הערכים במקור כדי להפוך אותם ללא מספריים.

האם אני יכול לכבות המרת סוג אוטומטית?

לא בממשק. הפונקציה הבסיסית תומכת ב inferTypes אפשרות, אבל ממשק המשתמש 't לחשוף אותו, כך הסקת מסקנות היא תמיד על.If אתה צריך מחרוזות גולמיות, להשתמש במנתח ספרייה כמו Papa Parse או csv-parse עם הליהוק מושבת, או תקן את העמודות המושפעות לאחר ההמרה.

האם הוא תומך בקבצים מופרדים בנקודה-פסיק או בכרטיסייה?

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

מה קורה לתאים ריקים?

הם הופכים null, לא מחרוזות ריקות שים לב שהכלי's הוא "איך זה עובד" panel כרגע אומר את ההיפך - טקסט החלונית שגוי והקוד נכון.Cells המכילים את הטקסט המילולי null או nil גם להפוך null.

האם אוכל להמיר CSV ללא שורת כותרת?

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

האם הוא מטפל בפסיקים ובמעברי שורות בתוך שדות מצוטטים?

כן, שניהם מסלולי המנתח מצטטים מצב תו אחר תו, אז שדה כמו "Mike, Jr." שומר על הפסיק שלו, ושדה מצוטט המכיל שורה חדשה נשאר ערך בודד במקום לפצל את השורה. Escaped מרכאות כפולות ("") הפוך לציטוט מילולי יחיד, לכל RFC 4180.

מה קורה עם שמות עמודות כפולים?

הוא מסרב להמיר ואומר לך איזו כותרת משוכפלת. That's מכוון - אובייקט JSON יכול't יש שני מפתחות זהים, כך שהחלופה היא להפיל עמודה בשקט. מנתחים רבים עושים בדיוק את זה; שנה את שם העמודות והמר שוב.

האם יש גבול לשורה?

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

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

מס 'ניתוח קורה בדפדפן שלך וה - CSV שלך לעולם לא מועבר, וזה מה שהופך אותו בטוח עבור יצוא לקוחות ונתונים אחרים שאתה יכול & #39; t באופן לגיטימי להדביק לתוך כלי בצד השרת.Verify זה בדרך הקלה - פתח DevTools, לצפות בכרטיסייה רשת בזמן המרה, או פשוט לכבות את ה - Wi-Fi שלך ולראות שזה עדיין עובד.


הגרסה הקצרה

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

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

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

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

Frequently Asked Questions

Because type inference converted it to a number, and numbers can't store leading zeros. 07102 matches the "digits only" pattern, so it becomes 7102. This affects zip codes, padded SKUs, employee IDs, and any identifier that happens to be all digits. Quoting it in the CSV won't help — quotes are stripped before inference runs. Check your ID columns in the output, or prefix the values at the source to make them non-numeric.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!