RevealTheme logo

قالب‌بند و اعتبارسنج JSON

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

نحوه استفاده از این ابزار

  1. 1

    JSON خود را در فیلد ورودی بچسبانید.

  2. 2

    روی «قالب‌بندی» کلیک کنید تا با تورفتگی و خوانا نمایش داده شود، یا روی «کوچک‌سازی» تا فضای خالی حذف شود.

  3. 3

    خطاها دقیقاً به سطر و ستونی که تجزیه در آن ناموفق بوده اشاره می‌کنند.

  4. 4

    نتیجه را در کلیپ‌بورد خود کپی کنید.

JSON چیست و چرا قالب‌بندی آن اهمیت دارد؟

JSON (JavaScript Object Notation) زبان مشترک APIهای وب مدرن، فایل‌های پیکربندی و ثبت رویدادهای ساختاریافته است. هر API از نوع REST و GraphQL، JSON بازمی‌گرداند؛ هر package.json، tsconfig.json و بیشتر پیکربندی‌های CI، JSON هستند؛ AWS، GCP و Azure در CLIهای خود به زبان JSON صحبت می‌کنند. قدرت JSON در دستور زبان کمینه آن است: شش کاراکتر ساختاری ({}، []، کاما، دونقطه، گیومه)، چهار نوع اولیه (رشته، عدد، بولین و null) و تودرتویی بازگشتی. همین کمینه‌گرایی در عین حال نقطه‌ضعف آن است: JSON از نظرات، کاماهای انتهایی، کلیدهای بدون گیومه یا رشته‌های چندخطی پشتیبانی نمی‌کند. یک گیومه یا کامای نابه‌جا کل سند را خراب می‌کند. این ابزار ورودی را مطابق RFC 8259 (مشخصات JSON) اعتبارسنجی می‌کند و سپس آن را با تورفتگی منسجم برای خواندن ارائه می‌دهد، یا تمام فضای خالی را برای انتقال از طریق شبکه حذف می‌کند. تجزیه و قالب‌بندی به‌طور کامل در مرورگر شما از طریق توابع بومی JSON.parse و JSON.stringify موتور JavaScript اجرا می‌شوند، همان کدی که روی سرورهای Node.js و در همه مرورگرها اجرا می‌شود. این بدان معناست که داده‌های شما هرگز از شبکه عبور نمی‌کنند و رفتار اعتبارسنجی در اینجا دقیقاً با آنچه کد شما در تولید (production) خواهد دید مطابقت دارد.

موارد استفاده رایج

  • با چسباندن پاسخ‌های API در قالب‌بند، اشکالات آن‌ها را برطرف کنید؛ بی‌درنگ ساختاری را که JSON کوچک‌شده پنهان می‌کند ببینید.

  • JSON را پیش از ارسال به یک مصرف‌کننده‌ی سخت‌گیر (AWS CloudFormation، مانیفست‌های Kubernetes و غیره) اعتبارسنجی کنید.

  • گزارش‌های کتابخانه‌های ثبت‌رویداد ساختاریافته (Pino، Bunyan) را که JSON تک‌خطی تولید می‌کنند، خوانا کنید.

  • فایل‌های پیکربندی را پیش از جاسازی در HTML یا متغیرهای محیطی کوچک کنید (حجم کمتر، بایت‌های کمتری برای تجزیه).

  • محتوای JSON Web Token را پس از رمزگشایی از base64 قالب‌بندی کنید.

  • دو پاسخ API را با قالب‌بندی هر دو و مقایسه‌ی تفاوت‌هایشان بسنجید.

پرسش‌های متداول

آیا JSON من از مرورگر خارج می‌شود؟
خیر. تمام تجزیه و قالب‌بندی در مرورگر شما از طریق توابع داخلی JSON.parse و JSON.stringify انجام می‌شود. داده‌ها هرگز به سروری نمی‌رسند یا در لاگ‌ها ظاهر نمی‌شوند. استفاده از آن با پاسخ‌های API که شامل توکن‌ها، داده‌های مشتری یا سایر اسرار است امن است.
آیا می‌توانم JSON5 یا JSONC (با نظرات) را قالب‌بندی کنم؟
خیر: این ابزار از مشخصات سخت‌گیر JSON (RFC 8259) پیروی می‌کند. نظرات و کاماهای انتهایی خطاهای نحوی هستند و پیام خطای تجزیه‌گر تولید می‌کنند. برای گونه‌های انعطاف‌پذیر JSON، از یک تجزیه‌گر JSON5 مانند json5.org استفاده کنید، یا ورودی خود را ابتدا از یک پیش‌پردازنده که نظرات را حذف می‌کند عبور دهید.
چه اندازه تورفتگی باید استفاده کنم؟
۲ فاصله قرارداد JavaScript و وب و فراگیرترین گزینه است. ۴ فاصله مقدار پیش‌فرض اکوسیستم Python است (با تورفتگی PEP 8 مطابقت دارد). تب‌ها میان ویرایشگرها به‌طور ناهماهنگ نمایش داده می‌شوند و ابزارهای مقایسه را خراب می‌کنند؛ مگر آنکه تیم شما قرارداد سخت‌گیرانه‌ای برای تب داشته باشد، از آن‌ها پرهیز کنید. این انتخاب کاملاً زیبایی‌شناختی است؛ برای تجزیه‌گرها اهمیتی ندارد.
چرا JSON فشرده‌شده اهمیت دارد؟
JSON فشرده‌شده در بایت‌ها صرفه‌جویی می‌کند، چیزی که در مقیاس بزرگ معنادار است (برای مثال، یک API عمومی که ۱۰۰ کیلوبایت داده را به میلیون‌ها درخواست بازمی‌گرداند). برای فایل‌های پیکربندی کوچک (چند کیلوبایت)، این تفاوت ناچیز است. زمان‌های تجزیه مرورگر برای JSON قالب‌بندی‌شده و فشرده‌شده یکسان است، بنابراین تنها دلیل فشرده‌سازی پهنای باند است.
چگونه پیام‌های خطا را تفسیر کنم؟
پیام‌های خطای JSON.parse در JavaScript شامل موقعیت (جابه‌جایی از ابتدا) جایی که تجزیه شکست خورده است می‌شوند. خطاهای رایج: 'Unexpected token' معمولاً نشان‌دهنده یک گیومه یا کامای گم‌شده یا یک کاراکتر خاص بدون گریز است. 'Unexpected end of JSON input' به این معناست که سند بریده شده است. 'Unexpected non-whitespace character' اغلب نشان‌دهنده یک کامای انتهایی است.
آیا می‌توانم فایل‌های JSON بسیار بزرگ را قالب‌بندی کنم؟
JSON.parse مرورگر فایل‌هایی تا حدود ۱۰۰ مگابایت را پیش از آنکه عملکرد دچار مشکل شود مدیریت می‌کند. برای فایل‌های بزرگ‌تر، از jq در خط فرمان استفاده کنید: می‌تواند فایل‌های JSON با هر اندازه‌ای را به‌صورت جریانی (streaming) پردازش کند.
تفاوت بین JSON و شیءهای لفظی (object literal) در JavaScript چیست؟
JSON یک زیرمجموعه سخت‌گیر از نحو شیءهای لفظی JavaScript است. تفاوت‌ها: کلیدهای JSON باید رشته‌هایی درون گیومه دوتایی باشند (JS کلیدهای بدون گیومه و گیومه‌های تکی را مجاز می‌داند)؛ JSON نظرات، کاماهای انتهایی و undefined را ممنوع می‌کند؛ JSON عبارت، فراخوانی تابع یا مقدار محاسبه‌شده ندارد. JavaScript می‌تواند JSON را به‌صورت امن ارزیابی کند؛ JSON نمی‌تواند JavaScript دلخواه را ارزیابی کند.

ابزارهای مرتبط