راهنمای فنی

خطاهای رایج JSON: ویرگول انتهایی، نقل‌قول و Unexpected token

JSON نامعتبر را درست کنید: ویرگول انتهایی، نقل‌قول تکی، کلید بدون نقل‌قول، و Unexpected token. ببینید چرا JSON.parse شکست می‌خورد و چگونه JSON را اعتبارسنجی کنید.

پاسخ سریع

بیشتر خطاهای JSON از قواعد سخت می‌آیند: ویرگول انتهایی، نقل‌قول تکی، نام ویژگی بدون نقل‌قول، ویرگول جاافتاده، براکت ناهماهنگ، گریز نامعتبر، یا توضیح.

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. دنبالهٔ گریز نامعتبر

داخل رشتهٔ JSON، بک‌اسلش گریز را شروع می‌کند. دنباله‌هایی مثل " و \ و \n معتبرند. مسیر Windows نوشته‌شده به صورت C:\Users نیست: \U گریز 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. گریز بک‌اسلش در رشته‌ها را چک کنید.
  8. اگر JSON سخت می‌خواهید، توضیح را بردارید.

نقشهٔ سریع اصلاح‌های معمول:

مشکل اصلاح
ویرگول انتهاییویرگول بعد از آخرین مورد را پاک کنید.
نقل‌قول تکیبرای نام و رشته نقل‌قول دوگانه بگذارید.
کلید بدون نقل‌قولنام ویژگی را در نقل‌قول دوگانه بپیچید.
ویرگول جاافتادهبین ویژگی‌ها یا موارد آرایه ویرگول بگذارید.
براکت جاافتادههر جفت { } و [ ] را ببندید.
گریز نامعتبرگریز قانونی به کار ببرید، یا در مسیرها بک‌اسلش را دو برابر کنید.
توضیحبرای JSON استاندارد // و /* */ را بردارید.

JSON را در مرورگر اعتبارسنجی و قالب‌بندی کنید

NEXNARA قالب‌بندی و مقایسه JSON می‌تواند JSON را روی این دستگاه بررسی کند.

می‌توانید اعتبارسنجی کنید، با ۲ فاصله، ۴ فاصله یا تب زیبا کنید، minify کنید، دو سند را مقایسه کنید (JSON Diff)، و پروندهٔ .json باز کنید. تجزیه از JSON.parse در مرورگر استفاده می‌کند، نه eval.

سند بزرگ‌تر از ۵ MB ممکن است کند حس شود. متن بزرگ‌تر از ۱۵ 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 معتبر نیست.