JSON פורמט
עיצוב או דחיסה של JSON, ורואים בדיוק היכן קלט לא תקין נשבר.
הפלט יופיע כאן
מה עושה מעצב ה-JSON הזה
JSON (JavaScript Object Notation) הוא הפורמט הנפוץ ביותר להעברת נתונים מובְנים בין תוכניות — תגובות API, קובצי הגדרות, שורות לוג ועוד. הוא תוכנן להיות קומפקטי, מה שגם הופך אותו לקשה לקריאה כשאובייקטים מקוננים כמה רמות או מגיעים בשורה אחת. הכלי לוקח כל JSON שתדביק ומעצב אותו בשתי דרכים: מעוצב יפה, עם הזחה עקבית כך שהמבנה ברור במבט; או דחוס, נקי מכל רווח אופציונלי כדי להיות קטן ככל האפשר לשליחה.
הוא גם מאמת תוך כדי עיצוב. מכיוון שהוא מפרסר את הטקסט לפני שהוא מעצב אותו מחדש, JSON לא תקין לעולם לא מפיק פלט מטעה — במקום זאת תקבל את השורה והעמודה המדויקות שבהן הפרסור נכשל, כדי לקפוץ ישר לבעיה.
עיצוב יפה מול דחיסה — מתי כל אחד
שני המצבים משרתים מטרות הפוכות, ורוב זרימות העבודה משתמשות בשניהם בשלבים שונים:
- עצב יפה כשאתה קורא או מנפה — בוחן תגובת API, משווה שני payloads, או סוקר קובץ הגדרות ב-pull request. הזחה הופכת קיר טקסט לעץ ניתן-לעיון.
- דחוס כשאתה שולח — משבץ JSON ב-HTML, שומר אותו ב-cookie או במטמון, או שולח אותו בגוף בקשה שבו כל בית חשוב. JSON דחוס הוא אותם נתונים בדיוק, רק בלי הרווחים.
בורר ההזחה (2 רווחים, 4 רווחים או טאב) משפיע רק על פלט מעוצב. שני רווחים הם המוסכמה הנפוצה ביותר ב-JavaScript ובכלי אינטרנט; ארבעה רווחים או טאבים מתאימים לצוותים שמעדיפים אותם. מה שלא תבחר, התוצאה עדיין JSON תקין — ההזחה קוסמטית בלבד.
קריאת שגיאות ולידציה
כשה-JSON לא תקין, הכלי מדווח על השורה והעמודה של הבעיה הראשונה במקום הודעת "לא תקין" מעורפלת. הודעות שגיאה של מנועים שונות בין דפדפנים ולעיתים משמיטות מיקום, ולכן המיקום מחושב באופן עצמאי ומצביע על נקודה סבירה להתחיל בה. תקן את השגיאה הראשונה ובדוק שוב — תו אחד שגוי לרוב מפל לכמה בעיות לכאורה.
טעויות JSON נפוצות
JSON מחמיר יותר מאובייקט-ליטרל של JavaScript שהוא דומה לו. אלה השגיאות שהכי מפילות אנשים:
- פסיק נגרר: פסיק אחרי הפריט האחרון באובייקט או מערך תקין ב-JavaScript אבל לא ב-JSON.
- מרכאות בודדות: מחרוזות ומפתחות ב-JSON חייבים מרכאות כפולות. 'ערך' לא תקין; "ערך" תקין.
- מפתחות ללא מרכאות: כל מפתח אובייקט חייב להיות מחרוזת במרכאות, כך ש-{ name: "x" } חייב להפוך ל-{ "name": "x" }.
- הערות: ל-JSON אין תחביר הערות. // ו-/* */ יגרמו לשגיאת פרסור.
- מספרים מיוחדים: NaN, Infinity ו--Infinity אינם מספרי JSON תקינים.
- תווי מרכאות שגויים: "מרכאות חכמות" שהודבקו מתוכנת מלל נראות כמו מרכאות אך הן תווים שונים ולא ייפרסרו.
שאלות נפוצות
- האם ה-JSON שלי נשלח לשרת?
- לא. הפרסור, הוולידציה והעיצוב מתרחשים כולם בדפדפן שלך באמצעות JavaScript. שום דבר שתדביק אינו מועלה, נשמר או נרשם, כך שבטוח להשתמש בכלי עם payloads רגישים.
- האם העיצוב משנה את הנתונים שלי?
- לא. עיצוב יפה ודחיסה רק מוסיפים או מסירים רווחים בין אסימונים. המפתחות, הערכים, המספרים והמבנה זהים — רק הפריסה משתנה.
- למה הוא מסדר מחדש או מעצב את המספרים שלי?
- הכלי מפרסר JSON לערכים אמיתיים ומסרסר אותם בחזרה, כך שמספרים מנורמלים לצורתם הקנונית (למשל 1e3 הופך ל-1000). הערך לא משתנה; רק הייצוג הטקסטואלי שלו סטנדרטי.
- האם הוא מתמודד עם קובצי JSON גדולים מאוד?
- הוא מתמודד עם payloads גדולים, אבל מכיוון שהכול רץ בדפדפן, קבצים גדולים במיוחד (עשרות מגה-בייט) עלולים להיות איטיים או להגיע למגבלות זיכרון תלוי במכשיר שלך.
- האם הוא שומר על סדר המפתחות באובייקט?
- כן. סדר המפתחות נשמר בדיוק כפי שהוא מופיע בקלט — הכלי לא ממיין מפתחות.
- מה ההבדל בין JSON לאובייקט JavaScript?
- JSON הוא פורמט טקסט להחלפת נתונים; אובייקט JavaScript הוא ערך בזיכרון. JSON מחמיר יותר: הוא דורש מפתחות ומחרוזות במרכאות כפולות, אוסר פסיקים נגררים והערות, ומתיר רק קבוצה קבועה של סוגי ערכים (מחרוזות, מספרים, בוליאנים, null, מערכים ואובייקטים).
- אפשר לעצב JSON5 או JSONC (JSON עם הערות)?
- לא. הכלי מאמת JSON תקני ומחמיר. JSON5 ו-JSONC מוסיפים הערות ונוחויות אחרות שאינן חלק ממפרט ה-JSON, ולכן ידווחו כשגיאות.