עזרה טכנית

שגיאות JSON נפוצות: פסיק סופי, מרכאות ו-Unexpected token

תקנו JSON לא תקין: פסיק סופי, מרכאות בודדות, מפתחות בלי מרכאות, ו-Unexpected token. ראו למה JSON.parse נכשל ואיך לאמת JSON.

תשובה מהירה

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

JSON נראה כמו אובייקט JavaScript, אבל מחמיר יותר. שמות מאפיין ומחרוזות צריכים מרכאות כפולות.

אם מופיע Unexpected token, התו המדווח עשוי להיות המקום שבו הניתוח נעצר—לא בהכרח תחילת הטעות המקורית.

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

למה JSON נשבר כל כך בקלות?

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

1. פסיקים סופיים

הפסיק העודף אחרי המאפיין האחרון הוא הבעיה. JSON תקני לא מאפשר אותו.

לא תקין

{
  "name": "Alex",
  "age": 30,
}

תקין

{
  "name": "Alex",
  "age": 30
}

אותו כלל חל על מערכים. הסירו את הפסיק אחרי הפריט האחרון.

לא תקין

[
  "red",
  "green",
]

תקין

[
  "red",
  "green"
]

2. מרכאות בודדות במקום כפולות

JavaScript לעיתים קרובות מקבל מרכאות בודדות. JSON לא. שמות מאפיין וערכי מחרוזת חייבים מרכאות כפולות.

לא תקין

{
  'name': 'Alex'
}

תקין

{
  "name": "Alex"
}

3. שמות מאפיין בלי מרכאות

ב-JavaScript אפשר לפעמים לכתוב name בלי מרכאות. ב-JSON כל שם מאפיין חייב להיות מחרוזת במרכאות כפולות.

לא תקין

{
  name: "Alex",
  age: 30
}

תקין

{
  "name": "Alex",
  "age": 30
}

4. פסיקים חסרים בין ערכים

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

לא תקין

{
  "name": "Alex"
  "age": 30
}

תקין

{
  "name": "Alex",
  "age": 30
}

5. סוגריים חסרים או עודפים

אובייקטים משתמשים ב-{ }. מערכים ב-[ ]. JSON מקונן נכשל לעיתים כשחסר ], יש עודף }, או שהשניים הוחלפו. ספרו זוגות פתיחה וסגירה.

לא תקין

{
  "items": [1, 2
}

תקין

{
  "items": [1, 2]
}

6. רצפי escape לא תקינים

בתוך מחרוזת JSON, לוכסן הפוך מתחיל escape. רצפים כמו " , \ ו-\n תקינים. נתיב Windows שנכתב C:\Users אינו: \U אינו escape JSON חוקי. הכפילו את הלוכסנים, או שהמנתח ייעצר בתו הזה.

לא תקין

{"file":"C:\Users\Alex"}

תקין

{"file":"C:\\Users\\Alex"}

7. הערות בתוך JSON

ל-JSON תקני אין הערות. כלי תצורה מסוימים מקבלים // או /* */ (JSONC, JSON5 וכדומה). זה לא JSON תקני, ו-JSON.parse ידחה זאת.

לא תקין

{
  // user name
  "name": "Alex"
}

מה המשמעות של Unexpected token?

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

מה המשמעות של Unexpected end of JSON input?

הטקסט הסתיים לפני שהערך הושלם. סיבות טיפוסיות: } או ] חסר, קלט קטוע, גוף ריק, או תגובת API שנקטעה. זו לא באג אחד.

למה JSON.parse() נכשל?

JSON.parse() מקבל רק טקסט JSON תקין. זה מצליח:

const text = '{"name":"Alex"}';
const data = JSON.parse(text);

זה נכשל, כי מרכאות בודדות אינן JSON:

const text = "{'name':'Alex'}";
JSON.parse(text);

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

JSON אינו זהה לאובייקט JavaScript

ליטרל אובייקט ב-JavaScript יכול להיראות כמו { name: 'Alex' }. JSON תקין חייב להיראות כמו { "name": "Alex" }: שמות ומחרוזות במרכאות כפולות, בלי פסיק סופי, בלי הערות.

  • טקסט JSON
  • המנתח קורא אסימונים
  • נתונים תקינים או Unexpected token
סימן השגיאה הוא היכן שהניתוח נעצר, וזה עשוי להיות אחרי הטעות האמיתית.

איך למצוא שגיאת JSON במהירות

עבדו בסדר הזה. אל תתחילו בשכתוב כל הקובץ.

  1. הריצו את ה-JSON דרך מאמת.
  2. קראו את השגיאה הראשונה שדווחה.
  3. הסתכלו מעט לפני המיקום שדווח.
  4. בדקו פסיקים, במיוחד סופיים וחסרים.
  5. בדקו מרכאות: כפולות בלבד.
  6. התאימו { } ו-[ ].
  7. בדקו escape של לוכסן הפוך במחרוזות.
  8. הסירו הערות אם אתם צריכים JSON מחמיר.

מפה מהירה של התיקונים הרגילים:

בעיה תיקון
פסיק סופימחקו את הפסיק אחרי הפריט האחרון.
מרכאות בודדותהשתמשו במרכאות כפולות לשמות ומחרוזות.
מפתח בלי מרכאותעטפו את שם המאפיין במרכאות כפולות.
פסיק חסרשימו פסיק בין מאפיינים או פריטי מערך.
סוגר חסרסגרו כל זוג { } ו-[ ].
escape לא תקיןהשתמשו ב-escape חוקי, או הכפילו לוכסנים בנתיבים.
הערההסירו // ו-/* */ עבור JSON תקני.

אמתו ופרמטו JSON בדפדפן

NEXNARA עיצוב והשוואת JSON יכול לבדוק JSON במכשיר הזה.

אפשר לאמת, לייפות עם 2 רווחים, 4 רווחים או טאבים, minify, להשוות שני מסמכים (JSON Diff), ולפתוח קובץ .json. הניתוח משתמש ב-JSON.parse בדפדפן, לא ב-eval.

מסמכים גדולים מ-5 MB עלולים להרגיש איטיים. טקסט גדול מ-15 MB אינו מעובד בדפדפן, כדי שהדף יישאר מגיב.

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

צריך לבדוק JSON לא תקין? פתחו את עיצוב והשוואת JSON והדביקו את הטקסט.

FAQ

למה ה-JSON שלי אומר Unexpected token?

המנתח פגע בתו שאינו מותר באותו מקום. הטעות האמיתית—לעיתים קרובות פסיק חסר או מרכאה בודדת—עשויה לשבת ממש לפני המיקום הזה.

האם פסיקים סופיים מותרים ב-JSON?

לא. JSON תקני אינו מאפשר פסיק אחרי המאפיין או פריט המערך האחרון. ליטרלי אובייקט ב-JavaScript לעיתים קרובות מאפשרים.

האם JSON יכול להשתמש במרכאות בודדות?

לא. שמות מאפיין ומחרוזות חייבים מרכאות כפולות.

האם JSON יכול להכיל הערות?

לא ב-JSON תקני. כלים מסוימים מקבלים JSONC או JSON5 עם הערות; JSON.parse עדיין ידחה אותם.

למה JSON.parse() נכשל?

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

איך בודקים אם JSON תקין?

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