JSON Diff: مقایسهٔ اشیای JSON

دو سند JSON را جای‌گذاری کنید تا دقیقاً ببینید چه چیزی تغییر کرده است. هر تفاوت با مسیرش فهرست می‌شود، مثلاً $.users[2].email، و قالب‌بندی یا ترتیب کلیدها هرگز هشدار اشتباه ایجاد نمی‌کنند.

اجرا در مرورگر شمابدون ثبت‌نامبدون آپلود

ترتیب کلیدها همیشه نادیده گرفته می‌شود.

نحوهٔ استفاده از JSON Diff

  1. JSON اصلی را در سمت راست و JSON تغییریافته را در سمت چپ جای‌گذاری کنید یا دو فایل باز کنید.
  2. خطاهای نحوی زیر هر کادر با خط و ستون نمایش داده می‌شوند تا سریع اصلاحشان کنید.
  3. جدول مسیرهای تغییریافته را بخوانید: هر ردیف نشان می‌دهد مقداری اضافه، حذف یا تغییر کرده است، همراه با مقدار قدیم و جدید.
  4. وقتی فهرست‌ها در واقع مجموعه‌اند، مثلاً تگ‌ها یا مجوزها، نادیده گرفتن ترتیب آرایه را فعال کنید.
  5. برای دیدن تغییرات در بافتشان به نمای کنار هم بروید، یا فهرست تغییرات را به‌صورت JSON کپی کنید.

چرا diff ساختاری JSON از diff متنی بهتر است

یک diff متنی ساده کاراکترها و خط‌ها را مقایسه می‌کند، بنابراین دو فایل JSON با دادهٔ یکسان ممکن است کاملاً متفاوت به نظر برسند اگر یکی فشرده باشد، تورفتگی متفاوتی داشته باشد یا ترتیب کلیدهایش فرق کند. این ابزار ابتدا هر دو سند را تجزیه می‌کند و داده‌ها را مقایسه می‌کند: اشیا کلید به کلید و صرف‌نظر از ترتیب مقایسه می‌شوند و اعداد، رشته‌ها، مقادیر بولی و null بر اساس مقدار. فقط تغییرات واقعی گزارش می‌شوند.

تغییرات چگونه گزارش می‌شوند

هر تفاوت یک مکان به سبک JSONPath می‌گیرد، مانند $.owner.email یا $.items[3].price، و یکی از سه نوع زیر:

  • اضافه‌شده: کلید یا عنصر آرایه فقط در JSON تغییریافته وجود دارد.
  • حذف‌شده: فقط در JSON اصلی وجود دارد.
  • تغییریافته: در هر دو وجود دارد اما مقدارش فرق می‌کند، از جمله تغییر نوع مانند تبدیل یک رشته به عدد.

آرایه‌ها با الگوریتم طولانی‌ترین زیردنبالهٔ مشترک (LCS) هم‌تراز می‌شوند، بنابراین درج یک عنصر در ابتدای فهرست به‌عنوان یک افزودن گزارش می‌شود، نه اینکه همهٔ عناصر بعدی تغییریافته علامت بخورند.

نادیده گرفتن ترتیب آرایه

بسیاری از APIها فهرست‌هایی برمی‌گردانند که ترتیبشان معنایی ندارد، مانند نقش‌ها، تگ‌ها یا شناسه‌ها. با فعال بودن نادیده گرفتن ترتیب آرایه، آرایه‌ها به‌صورت مجموعه مقایسه می‌شوند: یک عنصر فقط وقتی اضافه یا حذف‌شده محسوب می‌شود که همتای برابری در طرف دیگر نداشته باشد. سپس نمای کنار هم عناصر آرایه را مرتب می‌کند تا فهرست‌های برابر هم‌تراز شوند.

کاربردهای رایج

مقایسهٔ پاسخ‌های API بین staging و production، بررسی اینکه یک migration چه چیزی را در فایل پیکربندی تغییر داده، بازبینی تفاوت‌های دو فایل package.json یا tsconfig و دیباگ snapshot testها.

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

آیا ترتیب کلیدها در مقایسهٔ JSON مهم است؟
خیر. اشیای JSON بدون ترتیب‌اند، بنابراین {"a":1,"b":2} و {"b":2,"a":1} برابر گزارش می‌شوند. ترتیب آرایه به‌طور پیش‌فرض مهم است چون آرایه‌ها ترتیب دارند، اما می‌توانید با نادیده گرفتن ترتیب آرایه آن را خاموش کنید.
آیا JSON من روی سرور آپلود می‌شود؟
خیر. هر دو سند در مرورگر شما تجزیه و مقایسه می‌شوند. هیچ چیزی از طریق شبکه ارسال نمی‌شود، بنابراین ابزار برای پاسخ‌های API حاوی توکن یا دادهٔ مشتری امن است.
مسیرهایی مانند $.users[2].email یعنی چه؟
$ ریشهٔ سند است، .users یک کلید است و [2] سومین عنصر یک آرایه است (اندیس‌ها از 0 شروع می‌شوند). کلیدهایی که فاصله یا کاراکتر ویژه دارند داخل کروشه نوشته می‌شوند، مانند $["first name"].
آیا 1 با 1.0 برابر است؟
بله. هر دو به یک عدد تجزیه می‌شوند، بنابراین تفاوت گزارش نمی‌شود. یک عدد و یک رشته، مانند 1 و "1"، متفاوت‌اند و تغییریافته گزارش می‌شوند.
آیا می‌توانم JSON دارای کامنت یا کامای انتهایی را مقایسه کنم؟
JSON استاندارد این‌ها را مجاز نمی‌داند، بنابراین چنین ورودی‌ای با خط و ستون دقیق علامت‌گذاری می‌شود. کامنت‌ها یا کاماها را حذف کنید، یا ابتدا سند را در فرمت‌کنندهٔ JSON تمیز کنید.

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