فرمتدهی و اعتبارسنجی JSON
JSON را بچسبانید تا آن را خوانا و مرتب کنید، فشرده کنید یا کلیدهایش را مرتب کنید. اگر قابل تجزیه نباشد، ابزار سطر و ستونی را که تجزیهگر در آن متوقف شده نشان میدهد و نشانگری زیر مشکل میگذارد؛ به این ترتیب پیدا کردن یک ویرگول جاافتاده در پاسخی 3,000 سطری فقط چند ثانیه طول میکشد.
۰ نویسه · ۰ واژه · ۰ خط
۰ نویسه · ۰ واژه · ۰ خط
کاملاً در همین زبانهٔ مرورگر اجرا میشود. متن شما هرگز آپلود یا ذخیره نمیشود.
انواع مقدار در JSON
RFC 8259 فقط همین مقادیر را مجاز میداند. اشیا و آرایهها تو در تو میشوند؛ بقیه برگ هستند.
| نوع | مثال | قاعده |
|---|---|---|
| شیء | {"id": 7, "tags": ["a"]} | کلیدها باید رشتههایی با نقلقول دوتایی باشند؛ اعضا با ویرگول جدا میشوند و ویرگول انتهایی مجاز نیست. |
| آرایه | [1, "two", null] | فهرست مرتب از هر مقداری، با انواع ترکیبی. |
| رشته | "caf\u00e9 \"quoted\"" | فقط نقلقول دوتایی؛ نویسههای کنترلی باید escape شوند؛ escapeهای \u چهار رقم هگز دارند. |
| عدد | -12.5e3 | فقط دهدهی: منفی اختیاری، بدون صفر ابتدایی، کسر و توان اختیاری. NaN و Infinity مجاز نیستند. |
| true، false، null | true | حروف کوچک، بدون نقلقول. |
آنچه تجزیهگر رد میکند
هر ورودی زیر هنگام ساخت این صفحه به همان JSON.parse که فرمتکننده استفاده میکند داده شده است.
| ورودی | مشکل | JSON.parse |
|---|---|---|
{"a": 1,} | ویرگول انتهایی | رد شده |
{'a': 1} | رشته با تکنقلقول | رد شده |
{"a": 1 /* note */} | توضیحات | رد شده |
{a: 1} | کلید بدون نقلقول | رد شده |
{"n": NaN} | NaN عدد JSON نیست | رد شده |
{"n": 012} | صفر ابتدایی | رد شده |
{"n": 0x1F} | عدد هگزادسیمال | رد شده |
escapeها در رشتههای JSON
| نویسه | نوشتن در JSON |
|---|---|
| نقلقول دوتایی | "\"" |
| بکاسلش | "\\" |
| خط جدید (Line feed) | "\n" |
| تب | "\t" |
| بازگشت سر خط (Carriage return) | "\r" |
| نویسهٔ کنترلی U+0001 | "\u0001" |
| اسلش (escape اختیاری) | "/" |
| حرف غیر ASCII (بدون نیاز به escape) | "é" |
قواعدی که یک سند JSON معتبر رعایت میکند
JSON در RFC 8259 تعریف شده است (از نظر محتوا با ECMA-404 یکسان است). یک سند JSON فقط یک مقدار است: شیء، آرایه، رشته، عدد، true، false یا null. کلیدهای شیء همیشه رشتههایی داخل دابلکوتیشن هستند. رشتهها فقط با دابلکوتیشن نوشته میشوند و باید نقلقول، بکاسلش و هر نویسهٔ کنترلی زیر U+0020 را escape کنند؛ بنابراین تب و خط جدید داخل رشته بهصورت \t و \n نوشته میشود. RFC 8259 همچنین برای JSON که میان سامانهها مبادله میشود، UTF-8 را الزامی میداند.
اعداد دهدهی هستند: بدون صفر ابتدایی، بدون مبنای شانزدهدهی، بدون NaN یا Infinity و بدون علامت مثبت در ابتدا. این قالب نه توضیح (کامنت) دارد و نه ویرگول انتهایی. همین دو قاعدهٔ آخر بیشتر خطاهای واقعی را میسازند، چون شیءهای جاوااسکریپت، JSON5 و بسیاری از فایلهای پیکربندی هر دو را مجاز میدانند. جدول مرجع زیر با دادن هر اشتباه رایج به همان تجزیهگری ساخته شده که این ابزار استفاده میکند.
مرتبسازی خوانا، فشردهسازی، مرتب کردن کلیدها
زیباسازی (Pretty-print) خط جدید و تورفتگی اضافه میکند تا ساختار خوانا شود؛ دو فاصله رایجترین سبک در پروژههای جاوااسکریپت است، چهار فاصله انتخاب معمول با json.dumps(indent=4) در پایتون است و تب به هر خواننده اجازه میدهد عرض را خودش تعیین کند. کوچکسازی (Minify) هر فاصلهٔ غیرضروری را حذف میکند؛ این کار حجم دادهٔ API را کم میکند و سند را برای لاگ یا متغیرهای محیطی در یک خط جا میدهد.
مرتبسازی کلیدها اعضای هر شیء را بهصورت بازگشتی بر اساس حروف الفبا مرتب میکند. شیءهای JSON طبق تعریف ترتیب ندارند، پس مرتبسازی معنا را تغییر نمیدهد، اما مقایسهٔ دو سند از سامانههای مختلف را بسیار آسانتر میکند. توجه کنید که تجزیه، اعداد را به double جاوااسکریپت تبدیل میکند: اعداد صحیح بزرگتر از 2^53 (9,007,199,254,740,992)، مانند برخی شناسههای پایگاه داده، هنگام قالببندی دوباره دقت خود را از دست میدهند؛ پس آنها را بهصورت رشته نگه دارید.
تبدیل JSON به فرمتهای دیگر
سند قالببندیشده خواناتر است، اما گاهی به شکل دیگری نیاز دارید. آرایهای از شیءها با تبدیل JSON به CSV به صفحهگسترده تبدیل میشود و مبدل داده کل فایلها را میان JSON، XML، YAML و CSV جابهجا میکند.
پرسشهای متداول
- چرا ابزار JSON دارای توضیحات (comment) را رد میکند؟
- JSON استاندارد نحوی برای توضیح (کامنت) ندارد؛ RFC 8259 آن را عمداً کنار گذاشته است. کامنتها را حذف کنید، یا اگر ابزاری که فایل را میخواند از JSONC یا JSON5 پشتیبانی میکند، فایل را با همان فرمت نگه دارید.
- عبارت «Unexpected token» در خطای JSON به چه معناست؟
- تجزیهگر به نویسهای رسیده که در آن موقعیت مجاز نیست، مانند تککوتیشن، ویرگول انتهایی پیش از } یا کلید بدون کوتیشن. خط و ستونی که نمایش داده میشود به همان نویسه اشاره میکند.
- آیا مرتب کردن کلیدها دادههای من را تغییر میدهد؟
- خیر. ترتیب اعضای شیء در JSON معنایی ندارد، پس سند مرتبشده معادل سند اصلی است. ترتیب آرایه معنادار است و هرگز تغییر نمیکند.
- چرا یک عدد طولانی پس از فرمتدهی تغییر کرد؟
- جاوااسکریپت اعداد را بهصورت اعشاری ۶۴ بیتی نگه میدارد که اعداد صحیح را فقط تا 2^53 دقیق نشان میدهد. شناسههای بزرگتر هنگام تجزیه گرد میشوند؛ آنها را بهصورت رشته ارسال کنید تا همهٔ ارقام حفظ شود.
- آیا میتوانم بهجای چسباندن، یک فایل JSON را فرمت کنم؟
- فایل را در یک ویرایشگر متن باز کنید، همه را انتخاب کنید و اینجا جایگذاری کنید. فایلهای بسیار بزرگ در حد دهها مگابایت ممکن است هنگام نمایش در کادر متن، تب را کند کنند.