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