فرمتکننده JSON
زیباسازی، فشردهسازی و اعتبارسنجی JSON - و زمانی که تجزیه نمیشود، محل دقیق آن مشخص شود.
ورودی
0 کاراکترخروجی
زیباسازی، فشردهسازی و اعتبارسنجی JSON - و زمانی که تجزیه نمیشود، محل دقیق آن مشخص شود.
JSON ای که از یک لاگ API یا یک فایل پیکربندی بیرون میآید معمولاً یک خط طولانی واحد است، و JSON ای که تجزیه نمیشود معمولاً در جایی که نمیبینید دچار خطا میشود. این ابزار آن را با تورفتگی نمایش میدهد تا بتوانید بخوانیدش، وقتی به فرم کوچک نیاز دارید آن را فشرده میکند، و وقتی خراب باشد خط و ستون را به شما میگوید و آن خط را نشان میدهد.
در بیشتر مواقع شما اینجا نیستید تا JSON را زیبا کنید - اینجا هستید چون چیزی آن را رد کرده و نگفته چرا. تجزیهگر خط، ستون و آنچه را که انتظار داشت گزارش میدهد، و ابزار آن خط را همراه با دو خط اطرافش چاپ میکند. یک کاما فراموششده در چهارصدمین خط یک پیکربندی، به محض اینکه بدانید کجاست، یک اصلاح سیثانیهای است.
JSON هرگز هیچیک از این دو را مجاز ندانسته، اما فایلهایی که مردم واقعاً به شما میدهند - tsconfig، تنظیمات VS Code، هر چیز ویرایششده با دست - پر از آنهاست. علامتزدن گزینه، قبل از تجزیه آنها را حذف میکند، و ابزار سپس میگوید چند کامنت و چند کاما حذف کرده است. این اختیاری است و دقیقاً گزارش میشود چون قالببندیکنندهای که سند شما را بیسروصدا تغییر میدهد بدتر از یکی است که آن را رد میکند.
حدس نمیزند منظور شما چه بوده است. فراتر از دو حذف بالا، چیزی ترمیم نمیشود: یک آکولاد بستهنشده، کلیدی با تککوتیشن یا کلیدی بدون کوتیشن گزارش میشود، نه بازنویسی. مرتبسازی کلیدها و تورفتگی مجدد هرگز ترتیب یک آرایه را عوض نمیکنند و هیچ رشتهای را تغییر نمیدهند. بخش بعدی معدود حالتهایی را فهرست میکند که خروجی ممکن است باز هم با آنچه چسباندهاید فرق داشته باشد.
JSON شما تجزیه و دوباره نوشته میشود، پس چند چیز به شکل یکدستشده برمیگردد. اعداد دوباره نوشته میشوند: 1.50 به 1.5، 1E3 به 1000.0 و -0 به 0 تبدیل میشود، و عدد اعشاری با رقمهایی بیش از ظرفیت یک float شصتوچهار بیتی گرد میشود (0.1000000000000000055 به 0.1 تبدیل میشود). اعداد صحیح تا 4,300 رقم دقیقاً حفظ میشوند (طولانیترها رد میشوند). اگر یک شیء کلیدی را تکرار کند، فقط آخرین مقدار میماند، بدون هیچ هشداری. NaN، Infinity و -Infinity پذیرفته و بدون تغییر منتقل میشوند، هرچند JSON استاندارد (RFC 8259) آنها را مجاز نمیداند، و عددی بزرگتر از ظرفیت float، مانند 1e400، به صورت Infinity بیرون میآید. اگر هر کدام از اینها برای سیستمی که داده را به آن میدهید مهم است، پیش از اعتماد به نتیجهای بدون خطا خودتان بررسی کنید.
برای تجزیه به سرور فرستاده میشود و مستقیماً در همان پاسخ بازگردانده میشود. هیچچیز روی دیسک نوشته، کش یا لاگ نمیشود، و رکورد استفاده فقط شمارشها را نگه میدارد - اندازه، عمق تودرتویی، حالت انتخابی - هرگز خود سند را.
معمولاً بهخاطر کامنتها، کاماهای انتهایی، تککوتیشنها یا کلیدهای بدون کوتیشن - که همگی در فایلهای پیکربندی رایجاند و هیچکدام JSON معتبر نیستند. برای دو مورد اول گزینهی «پذیرفتن کامنتها و کاماهای انتهایی» را علامت بزنید؛ موارد دیگر واقعاً نامعتبرند و باید اصلاح شوند.
تا 2,000,000 کاراکتر در هر درخواست؛ متن طولانیتر با ذکر طول دقیقش رد میشود. برای فایلهایی به این اندازه، یک ابزار خط فرمان مانند jq بهتر است.
خطوط لولهی لاگ و بارگذارهای جریانی بهجای یک آرایه بزرگ، یک شیء JSON در هر خط میخوانند. آن را انتخاب کنید و یک آرایه سطحبالا بهصورت یک رکورد فشرده در هر خط بازمیگردد.
خیر. ترتیب کلیدهای یک شیء در JSON معنایی ندارد، و ترتیب آرایه - که معنادار است - هرگز لمس نمیشود. مرتبسازی وجود دارد تا بتوان دو نسخه از یک سند را بدون نویز مقایسه کرد.
در اکسل Microsoft 365 آن را به صورت فایل .json ذخیره کنید و Data > Get Data > From File > From JSON را انتخاب کنید. Power Query آن را باز میکند: آرایه سطح بالا به شکل List دیده میشود، To Table آن را به ستونی از Records تبدیل میکند و دکمه گسترش (دو فلش) در سرستون هر کلید را به ستون جداگانهای میبرد؛ گسترش یک آرایه تودرتو برای هر عضو یک ردیف اضافه میکند. Power Query به یک سند JSON معتبر نیاز دارد، پس اول خطاها را همینجا با شماره سطر و ستون برطرف کنید و سپس خروجی زیباسازی یا کوچکسازی را ذخیره کنید؛ خروجی JSON Lines برای ابزارهای لاگ است. این ابزار خودش JSON را به CSV یا اکسل تبدیل نمیکند. نام منوها به زبان اکسل شما نمایش داده میشود.
Python یک بررسیکننده آماده دارد: python -m json.tool data.json سند را با تورفتگی ۴ فاصله چاپ میکند یا با پیامی مثل Expecting ',' delimiter: line 3 column 3 متوقف میشود. اگر jq نصب باشد، jq . data.json سند را قالببندی میکند و jq empty data.json فقط بررسی میکند و وقتی فایل معتبر باشد چیزی چاپ نمیکند. هیچکدام کامنت یا ویرگول پایانی را نمیپذیرند، پس فایل تنظیماتی که آنها را دارد آنجا خطا میدهد؛ آن را اینجا بچسبانید و "مجاز بودن کامنتها و ویرگولهای پایانی" را فعال کنید تا ببینید چه چیزی حذف شد.
تجزیهگر منتظر کلید یک شیء بود و چیز دیگری پیدا کرد. معمولاً کلیدها داخل نقلقول تکی هستند یا اصلاً نقلقول ندارند، مثل {'name': 'Asha'} که از Python یا JavaScript کپی شده و در خط ۱، ستون ۲ متوقف میشود: JSON دور هر کلید و هر رشته نقلقول دوتایی میخواهد و این ابزار هرگز نقلقولها را بازنویسی نمیکند، پس خودتان آنها را اصلاح کنید. اگر همین پیام روی آکولاد بسته ظاهر شود، مثل {"a": 1,}، یعنی یک ویرگول پایانی وجود دارد؛ برای حذفش "مجاز بودن کامنتها و ویرگولهای پایانی" را فعال کنید. Expecting value روی True، False یا None یعنی مقدارهای Python: در JSON مقدارهای true، false و null با حروف کوچک نوشته میشوند. در Python، json.dumps(data) خروجی JSON معتبر میدهد و print(data) نمیدهد. خطاها دقیقاً همانطور که تجزیهگر Python مینویسد، به انگلیسی، نمایش داده میشوند تا بتوانید همان پیام را جستوجو کنید.
تجزیهگر یک مقدار کامل JSON را خوانده و بعد از آن متن بیشتری پیدا کرده است. علتهای رایج: لاگی با قالب JSON Lines (NDJSON) که در هر خط یک شیء دارد و در خط ۲، ستون ۱ متوقف میشود؛ دو سند که پشت سر هم چسبانده شدهاند؛ یا یک کامنت // بعد از آخرین آکولاد بسته که گزینه "مجاز بودن کامنتها و ویرگولهای پایانی" آن را حذف میکند. این ابزار هر بار یک سند را بررسی میکند، پس فقط یک رکورد را بچسبانید یا رکوردها را با ویرگول از هم جدا کنید و داخل [ ] بگذارید؛ با انتخاب JSON Lines دوباره هر رکورد در یک خط نوشته میشود.