נתונים · 3 דקות קריאה ·
JSON לא תקין? 7 הטעויות שמאחורי כמעט כל שגיאה
פסיקים מיותרים, גרש בודד, הערות ועוד: הטעויות הקטנות ששוברות JSON, איך מזהים אותן מהר ואיך מתקנים כל אחת.

"Unexpected token" ו-"Unexpected end of JSON input" הן מהשגיאות הנפוצות ביותר שמפתחים רואים. JSON הוא פורמט קפדני, הרבה יותר מ-JavaScript שממנה הוא נולד, וכמעט כל כישלון נובע מאחת מכמה טעויות מוכרות.
1. פסיק בסוף
פסיק אחרי הפריט האחרון באובייקט או במערך הוא השגיאה מספר אחת. JavaScript מקבלת אותו, תקן ה-JSON לא.
{"name": "Ana", "age": 31,} ✗
{"name": "Ana", "age": 31} ✓
2. גרשיים בודדים ו-3. מפתחות בלי מירכאות
כל מפתח וכל מחרוזת חייבים מירכאות כפולות. {name: 'Ana'} הוא JavaScript תקין אבל JSON לא תקין, וצריך לכתוב {"name": "Ana"}.
4. הערות
ב-JSON אין הערות. // ו-/* */ הם שגיאה, וזה מפתיע את מי שמעתיק מקובץ הגדרות שנכתב ב-JSON5 או ב-JSONC, כמו ההגדרות של VS Code.
5. ערכים מיוחדים ו-6. תווים בלי escape
undefined, NaN, Infinity ופונקציות לא קיימים ב-JSON, ובמקומם משתמשים ב-null או במספר. בתוך מחרוזת, מירכאות כפולות נכתבות \" ולוכסן הפוך \\, ושבירת שורה נכתבת \n. נתיבי Windows הם מלכודת קלאסית: "C:\new" מכיל תו שורה חדשה, לא לוכסן ואחריו n.
7. סוגריים חסרים או מיותרים
סוגר } או ] חסר מופיע בדרך כלל כשגיאה בסוף הקלט, רחוק מהטעות האמיתית. עיצוב ה-JSON עם הזחות מראה מיד באיזו רמה הבעיה.
שגיאות שקשה לראות
יש JSON לא תקין שנראה מושלם על המסך:
- מירכאות מסולסלות. טקסט שהועתק ממעבד תמלילים, מאפליקציית צ׳אט או ממצגת מכיל לעיתים קרובות “ ו-” במקום מירכאות כפולות ישרות. הן נראות כמעט אותו דבר, אבל JSON מקבל רק את התו " הישר.
- סימן סדר בתים (BOM). עורכים מסוימים ב-Windows שומרים קבצים עם תו בלתי נראה בהתחלה. גם JSON.parse של JavaScript וגם json.loads של Python דוחים אותו, והשגיאה מצביעה על מיקום 0.
- רווחים בלתי שבירים ותווים בלתי נראים אחרים שהודבקו מדפי אינטרנט.
JSON תקין שעדיין גורם לבאגים
json.dumps של Python כותב NaN ו-Infinity כברירת מחדל, ומפענחים אחרים דוחים אותם; העבירו allow_nan=False כדי לתפוס את זה מוקדם. מספרים שלמים גדולים מאוד, כמו מזהי מסד נתונים של 64 ביט, הם JSON תקין אבל מאבדים דיוק ב-JavaScript מעבר ל-9007199254740991, ולכן ממשקי API שולחים אותם לעיתים קרובות כמחרוזות. רוב המפענחים מקבלים מפתחות כפולים, אבל הערך האחרון מנצח בשקט.
איך לקרוא את הודעת השגיאה
מפענחים מדווחים איפה הם נכשלו, לא איפה נעשתה הטעות. פסיק חסר מדווח בדרך כלל בתחילת המפתח הבא, וסוגר חסר בסוף הקלט. חפשו ממש לפני המיקום המדווח.
{
"name": "Ana"
"age": 31 ← השגיאה מדווחת כאן (שורה 3)
} הפסיק החסר נמצא בסוף שורה 2
מוצאים את המקום המדויק
בודק ה-JSON של 4Dev בודק את הטקסט מול תקן ה-JSON (RFC 8259) ומראה את השורה והעמודה של השגיאה הראשונה, יחד עם הצעה לתיקון. הוא בודק תחביר, לא משמעות: JSON תקין עדיין יכול להכיל סוג שגוי או שדה חסר מבחינת האפליקציה שלכם.