JSON در برابر JSON5 در برابر JSONC
جمعبندی: ابرمجموعههای سختگیر به ترتیب: JSONC کامنت اضافه میکند؛ JSON5 تکگیومه، کلید بیگیومه، ویرگول انتهایی و عدد هگز اضافه میکند. انتخاب اشتباه API را میشکند، نه ویرایشگر را.

جمعبندی: هر جا داده از مرز سیستم عبور میکند از JSON استاندارد استفاده کنید، و JSONC را فقط برای پیکربندی محلیای که انسان ویرایش میکند؛ وقتی تکگیومه، ویرگول انتهایی یا کلید بیگیومه میخواهید به JSON5 بروید، اما اول تأیید کنید بارگذار پشتیبانی میکند.
در یک خط: JSONC یعنی JSON بهعلاوه کامنت؛ JSON5 یعنی JSON بهعلاوه عادتهای جاوااسکریپت.
ماتریس ویژگیها
| ویژگی | JSON | JSONC | JSON5 |
|---|---|---|---|
| رشتههای گیومه دوتایی | ✅ | ✅ | ✅ |
| رشتههای تکگیومه | ❌ | ❌ | ✅ |
| کلیدهای بیگیومه | ❌ | ❌ | ✅ |
کامنت خطی // |
❌ | ✅ | ✅ |
کامنت بلوکی /* */ |
❌ | ✅ | ✅ |
| ویرگول انتهایی | ❌ | ❌ | ✅ |
عدد هگز 0xFF |
❌ | ❌ | ✅ |
Infinity / NaN |
❌ | ❌ | ✅ |
| رشته چندخطی | ❌ | ❌ | ✅ |
| خوانا برای پارسرهای استاندارد | ✅ | ❌ | ❌ |
توجه کنید JSONC فقط کامنت را حل میکند. بسیاری فرض میکنند «JSONی که کامنت مجاز میداند» ویرگول انتهایی را هم مجاز میداند؛ tsconfig.json همچنان روی آن شکست میخورد.
هر کدام برای چیست
JSON — تبادل. APIها، صفها، ستونهای JSON پایگاهداده، لاگها. هر چیزی ماشین-به-ماشین.
JSONC — پیکربندی ویرایشگر. VS Code خودش این فایلها را تجزیه میکند، پس JSON.parse هرگز آنها را نمیبیند. RFCای وجود ندارد؛ قراردادی عملی به رهبری مایکروسافت است.
JSON5 — ابرمجموعهای سهلگیر برای انسان. هدف «پیکربندیای بود که شبیه object literal جاوااسکریپت باشد». مناسبترین برای فایلهای .json5 که ابزارهای ساخت بارگذاری میکنند؛ گستردهترین نحو و باریکترین پشتیبانی ابزار.
انتخاب
| موقعیت | انتخاب |
|---|---|
| بدنه درخواست یا پاسخ | JSON، بدون جایگزین |
| ستونهای JSON در MySQL / PostgreSQL | JSON، توابعشان چیز دیگری نمیپذیرند |
| پیکربندی پروژه که توضیح لازم دارد | JSONC اگر پشتیبانی شود، وگرنه YAML |
| سهلگیری به سبک JS میخواهید | JSON5، پس از تأیید پشتیبانی بارگذار |
| افراد غیرمهندس ویرایشش میکنند | YAML، تورفتگی بر آکولاد برنده است |
یک تله آسان
تجزیه فایل JSONC بهعنوان JSON سختگیر خطایی تولید میکند که به کامنت اشاره میکند:
SyntaxError: Unexpected token / in JSON at position 42
پیش از حذف کامنت، بررسی کنید آیا فایل قرار است JSONC باشد. حذفش کنید و ممکن است دو خط بعدتر همچنان به ویرگول انتهایی بخورید.
پرسشهای متداول
چگونه بین JSONC و JSON5 انتخاب کنم؟
وقتی کامنت تنها چیزی است که میخواهید از JSONC استفاده کنید: // و /* */ را روی JSON اضافه میکند و settings.json و tsconfig.json در VS Code از آن استفاده میکنند. وقتی تکگیومه، کلید بیگیومه، ویرگول انتهایی، عدد هگز یا رشته چندخطی هم میخواهید از JSON5. هر دو به بارگذار بستگی دارند، پس تأیید کنید ابزاری که فایل را میخواند پشتیبانی میکند.
چرا فایل JSONC بهعنوان JSON استاندارد خوانده نمیشود؟
JSONC قراردادی عملی است، نه RFC مستقل، پس پارسرهای استاندارد کامنت را رد میکنند. JSON.parse روی چنین فایلی Unexpected token / میاندازد که به کامنت اشاره میکند نه داده. فقط پیکربندیای که ویرایشگر یا پارسر اختصاصی میخواند باید JSONC نوشته شود.
آیا باید فایل JSON5 به API بفرستم؟
نه. APIها، ستونهای JSON پایگاهداده و صفها JSON سختگیر تجزیه میکنند، پس تکگیومه، کلید بیگیومه و ویرگول انتهایی JSON5 رد میشوند. JSON5 برای پیکربندی محلیای است که انسان ویرایش میکند؛ پیش از عبور از مرز سیستم به JSON استاندارد تبدیلش کنید.