JSON Toolkit

למה פסיק בסוף שובר את JSON

שורה תחתונה: פסיקים בסוף חוקיים באובייקטים ליטרליים של JavaScript והרסניים ב-JSON. הנה השגיאה המדויקת, הדקדוק של RFC 8259 שגורם לה, ושלושה תיקונים שבאמת מחזיקים.

מתחילכ-3 דקות קריאהפורסם 2026-10-30עודכן 2026-10-30
למה פסיקים בסוף נכשלים ב-JSON ואיך לתקן אותם

שורה תחתונה: JSON אוסר פסיקים בסוף בכל מקום — כשמפרס נכשל, מחקו את הפסיק האחרון עם מעצב; השתמשו ב-JSON5 או JSONC רק לפירוס סלחני מקומי, ותמיד פלטו JSON סטנדרטי למערכות אחרות.

כי הדקדוק אומר כך.

{
  "name": "demo",
  "size": 12,
}

JSON.parse זורק Unexpected token } in JSON at position 34. Node מנסח זאת אחרת, אבל כל מנוע מצביע לאותו מקום: הפסיק לפני }.

על מה המפרס באמת מתלונן

כלל הייצור של אובייקט ב-RFC 8259 הוא:

object = begin-object [ member *( value-separator member ) ] end-object

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

אז אחרי פסיק המפרס מוכן לשם חבר נוסף. הוא קורא } ונכשל. מערכים מתנהגים באופן זהה — [1, 2, 3,] נכשל ב-].

מאיפה מגיע ההרגל

אובייקטים ליטרליים של JavaScript מתירים פסיקים בסוף מאז ES5, וכך גם רשימות Python וליטרלים מורכבים ב-Go. עורכים מוסיפים אותם אוטומטית. ואז מישהו מעתיק אובייקט ליטרלי מקובץ .js לקובץ .json, והקובץ מפסיק להתפרס.

המקור הנפוץ הנוסף הוא JSON שנבנה ביד: לולאה שרצה עם i <= length משאירה פסיק אחרי האלמנט האחרון.

שלושה תיקונים

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

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

הפסיקו לשרשר מחרוזות. השתמשו ב-JSON.stringify, json.dumps, Jackson. הסריאליזטור מטפל נכון במפרידים ופותר את הקידוד באותו זמן.

רשימת בדיקה מהירה

איפה סיבה טיפוסית
שירשור בלולאה i <= length משאיר פסיק עודף אחד
העתק-הדבק אובייקט ליטרלי שהועתק מקובץ JS
תבניות פסיק קבוע בתוספת לולאה שמוסיפה עוד אחד
עריכה ידנית השדה האחרון נמחק, הפסיק שלו נשאר

שאלות ותשובות

למה פסיקים בסוף חוקיים ב-JavaScript אבל לא ב-JSON?

אובייקטים ליטרליים של JavaScript מתירים אותם מאז ES5, וכך גם רשימות Python וליטרלים מורכבים ב-Go, ולכן ההרגל מלווה אנשים אל תוך JSON. RFC 8259 מתיר פסיקים רק בין חברים: החבר האחרון נעקב ישירות ב-} או ב-]. העתקת אובייקט ליטרלי מקובץ .js לקובץ .json היא המקור הרגיל.

האם לפרס כ-JSON5 כדי לקבל פסיקים בסוף?

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

איפה להסתכל קודם אחרי שגיאת פסיק בסוף?

התחילו במיקום שבהודעת השגיאה: הוא בדרך כלל מצביע על הפסיק לפני } או ]. אחר כך בדקו את שלושת המקורות הרגילים: לולאה שנכתבה עם i <= length, אובייקט ליטרלי שהודבק מקובץ JS, ותבנית שמוסיפה פסיק קבוע לצד לולאה. הדבקה במעצב מדווחת את השורה והעמודה המדויקות.

קריאה נוספת