JSON Toolkit

آیا NaN یا Infinity می‌تواند در JSON ظاهر شود

جمع‌بندی: JSON فقط literalهای عدد اعشاری دارد. JSON.stringify بدون هشدار NaN و Infinity را به null تبدیل می‌کند، و همین است که «فیلد عددی گاهی null است» مدام در محیط تولید ظاهر می‌شود.

مقدماتیحدود 3 دقیقه مطالعهانتشار 2026-10-30به‌روزرسانی 2026-10-30
واقعاً چه اتفاقی برای NaN و Infinity در JSON می‌افتد

جمع‌بندی: JSON نمی‌تواند NaN یا Infinity را نمایش دهد — JSON.stringify هر دو را بی‌صدا به null تبدیل می‌کند — پس حالت را صریح با null به‌همراه فیلد دلیل، یا مقدار رشته‌ای مستندشده کدگذاری کنید.

JSON.stringify({ ratio: NaN, limit: Infinity });
// '{"ratio":null,"limit":null}'

بدون خطا، بدون هشدار. دو عدد به null تبدیل می‌شوند.

دستور زبان چه چیزی را مجاز می‌داند

number = [ minus ] int [ frac ] [ exp ]

فقط اعشاری. NaN و Infinity نگهبان‌های IEEE 754 هستند، نه literal. اگر در JSON نوشته شوند شناسه‌های نامعتبرند، و چون معناشناسی مقایسه‌شان بین زبان‌ها متفاوت است، استاندارد به‌جای انتخاب یک نمایش آن‌ها را کنار می‌گذارد.

هر زبان به‌جایش چه می‌کند

زبان رفتار
JSON.stringify در جاوااسکریپت بی‌صدا null می‌دهد
json.dumps در Python به‌صورت پیش‌فرض NaN می‌دهد (غیراستاندارد)؛ با allow_nan=False خطا می‌دهد
encoding/json در Go unsupported value: NaN برمی‌گرداند
Jackson در Java به‌صورت پیش‌فرض رشته "NaN" می‌دهد

چهار رفتار برای یک مقدار. وقتی یک API بین‌زبانی فیلد عددی نشان می‌دهد که گهگاه null است، اول این لایه را بررسی کنید.

به‌جایش چه کنیم

رشته‌های مستندشده. "NaN"، "Infinity" با یادداشت نوع. هزینه‌اش یک بررسی صریح برای هر مصرف‌کننده است.

null به‌همراه فیلد وضعیت. بهتر: {"avgLatency": null, "avgLatencyStatus": "no-sample"}. دلیل همراه مقدار سفر می‌کند.

واحد را بازاندیشی کنید. بیشتر نتایج Infinity از تقسیم بر نمونه صفر می‌آیند. برگرداندن null و نمایش «هنوز داده‌ای نیست» معمولاً با حقیقت کسب‌وکار بهتر می‌خواند تا یک عدد بی‌نهایت.

تله‌های مرتبط

  • کتابخانه‌های نمودار روی null خط را می‌شکنند — تأیید کنید این همان چیزی است که می‌خواهید
  • JSON.stringify همچنین undefined، تابع و symbol را کاملاً حذف می‌کند؛ آن کلیدها ناپدید می‌شوند نه اینکه null شوند
  • پیش‌فرض allow_nan=True در Python خروجی‌ای تولید می‌کند که JSON.parse ردش می‌کند

مطالعه بیشتر