JSON Diff مقارنة
قارن ملفي JSON فوراً في متصفحك. عرض جنباً إلى جنب مع تمييز الفروق، وإخراج JSON Patch (RFC 6902)، وتجاهل الحقول المزعجة كالطوابع الزمنية والمعرّفات. خصوصية تامة، بدون رفع ملفات.
خيارات متقدمة
ما هو JSON Diff؟
أداة JSON Diff هي مقارنة هيكلية لمستندَي JSON تحترم نموذج بيانات JSON — المفاتيح غير مرتبة، والأنواع صارمة، وقد تكون المصفوفات مرتبة أو مفتاحية. بخلاف فرق النص (الذي يقارن الأسطر ويُبلّغ عن إعادة ترتيب المفاتيح أو المسافات البيضاء كفروق)، ينتج فرق JSON نتائج ذات دلالة دلالية.
الشكل الآلي القياسي هو JSON Patch (RFC 6902)، وهو مصفوفة عمليات مرتبة (add, remove, replace, move, copy, test) تحوّل مستنداً إلى آخر. تستخدم المسارات JSON Pointer (RFC 6901). ذو صلة وثيقة: JSON Merge Patch (RFC 7396) — أبسط لكنه لا يستطيع التمييز بين 'حذف مفتاح' و'تعيين مفتاح إلى null'. تُخرج هذه الأداة RFC 6902.
التحقق من التساوي العميق لـJSON في JavaScript أصعب مما يبدو. JSON.stringify(a) === JSON.stringify(b) يفشل عند إعادة ترتيب المفاتيح، ويُضلّل بشأن -0 مقابل 0 (كلاهما يُحوَّل إلى "0"). يجب أن يتجوّل الفرق الصحيح في كلا الشجرتين معاً باستخدام اتحاد مجموعات المفاتيح، ويميّز null من المفقود عبر مشغّل in، ويقرر ما يعنيه 'متساوٍ' للأرقام (Object.is افتراضياً، وإبسيلون للتسامح).
تعمل هذه الأداة بالكامل في متصفحك. المدخلات لا تغادر جهازك أبداً. آمنة لاستجابات API، والمخططات الداخلية، والإعدادات الخاصة.
هل تعمل مع أدوات JSON المجاورة؟ نسّق مع JSON Formatter؛ وحوّل مع JSON to YAML وYAML to JSON.
// Two JSON documents that look different but are semantically equal
const a = '{"a":1,"b":2}';
const b = '{"b":2,"a":1}';
// Naive comparison — wrong
JSON.stringify(JSON.parse(a)) === JSON.stringify(JSON.parse(b));
// → false (key order differs)
// JSON Diff (this tool) — correct: key order is irrelevant
// → 0 differences
// JSON Patch (RFC 6902) for { "a": 1 } → { "a": 2 }
// [{ "op": "replace", "path": "/a", "value": 2 }] الميزات الرئيسية
العرض الجنبي إلى جنب + JSON Patch
عرضان من فرق واحد: تمييز مرئي للمراجعة، وـpatch RFC 6902 للأتمتة.
تجاهل الحقول المزعجة
تحذف الضبطات المسبقة بنقرة واحدة المسارات /createdAt و/updatedAt و/*Id و/*At وrequestId وtraceId. مدعومة أنماط JSON Pointer الموسّعة المخصصة.
مطابقة المصفوفات بالمفتاح
قارن مصفوفات من الكائنات بحقل id لا بالفهرس — لبيئات K8s، وإدخالات package-lock، أو أي قائمة غير مرتبة منطقياً.
صارم بالنوع افتراضياً
1 ≠ "1". null ≠ مفقود. اكتشف انحراف التسلسل في backend في اللحظة التي يهبط فيها في تثبيت الاختبار.
يعمل 100% في المتصفح
المدخلات لا تغادر جهازك أبداً. لا رفع، ولا localStorage لـJSON، ولا تحليلات لما تلصقه.
شارك الرابط لا البيانات
يكتب 'رابط المشاركة' إعداداتك فقط في URL. مدخلات JSON تبقى محلية.
أمثلة
انحدار استجابة الـ API
{"user":{"id":1,"name":"Ada","createdAt":"2024-01-01"}} {"user":{"id":1,"name":"Ada Lovelace","createdAt":"2024-02-02"}} تغييران (الاسم + createdAt). أضف /user/createdAt إلى مسارات التجاهل وسيبقى تغيير الاسم فقط.
تدقيق ملف الإعدادات (إعادة ترتيب المفاتيح)
{"a":1,"b":2,"c":3} {"c":3,"a":1,"b":2} نفس البيانات بترتيب مفاتيح مختلف. تعتبر أداة JSON Diff أن ترتيب المفاتيح غير ذي دلالة — الفرق فارغ.
مصفوفة من الكائنات (المطابقة بالمفتاح)
[{"id":1,"qty":3},{"id":2,"qty":5}] [{"id":2,"qty":5},{"id":1,"qty":4}] غيّر وضع المصفوفة إلى 'المطابقة بالمفتاح' مع المفتاح id. بدون المحاذاة يبدو كل عنصر متغيراً؛ مع المحاذاة يتغير qty عند id=1 فقط.
إخراج JSON Patch (RFC 6902)
{"items":[{"id":1,"price":29.99}]} {"items":[{"id":1,"price":24.99}]} انتقل إلى تبويب JSON Patch للحصول على [{"op":"replace","path":"/items/0/price","value":24.99}] يمكنك تطبيقه باستخدام fast-json-patch.
كيفية الاستخدام
- 1
الصق كلا مستندَي JSON
الصق JSON الأصلي (يسار) والمعدَّل (يمين). يُعرض الفرق مباشرةً أثناء الكتابة؛ المدخلات الكبيرة (أكثر من 200 كيلوبايت) تنتقل إلى زر 'الفرق' اليدوي.
- 2
صفِّ الضوضاء
انقر على ضبط مسبق (الطوابع الزمنية / المعرّفات / التتبع) أو الصق أنماط JSON Pointer الموسّعة في 'مسارات التجاهل' لحذف الحقول غير ذات الصلة.
- 3
اختر العرض الذي تحتاجه
جنباً إلى جنب للمراجعة البشرية، JSON Patch (RFC 6902) للعمليات القابلة للتطبيق الآلي. استخدم 'رابط المشاركة' لإرسال الإعداد إلى زميل.
أخطاء الفرق الشائعة
ضوضاء ترتيب المفاتيح (أعراض فرق النص)
إذا كانت أداة الفرق تُبلّغ عن {"a":1,"b":2} مقابل {"b":2,"a":1} كمختلفَين، فهي تُجري فرق سطور لا فرق JSON. مفاتيح JSON غير مرتبة — تتجاهل هذه الأداة ترتيب المفاتيح تلقائياً.
diff a.json b.json # text diff: 'everything changed'
JSON Diff (this tool): 0 differences
الخلط بين null والمفقود
القيمتان {"a":null} و{} ليستا متساويتَين. التعامل معهما كمتساويتَين يُخفي أخطاء backend حقيقية.
{"a": null} == {} # collapsed by some tools {"a": null} ≠ {} # type-strict diff ترتيب المصفوفة بدون محاذاة المفتاح
القيمتان [{id:1},{id:2}] مقابل [{id:2},{id:1}] ليستا 'تغييرَين' لمجموعة منطقية. يُبلّغ التسلسلي عنهما كذلك؛ غيّر إلى المطابقة بالمفتاح.
Sequential diff: 4 modified
Match by key (id): 0 differences
انحراف النوع (رقم مقابل سلسلة)
تُسلسل الـbackends أحياناً المعرّفات بشكل غير متسق — 42 مقابل "42". تُشير الأداة إليها كتعديلات 'نوع' حتى تتمكن من اكتشاف الانحراف مبكراً.
{"id": 42} vs {"id": "42"} # serialization bug Diff reports 'modified (type)' with both values
دقة الفاصلة العائمة
0.1 + 0.2 !== 0.3 في IEEE 754. مع tolerance=0 (الافتراضي)، يُشار إلى هذا. عيّن التسامح على 1e-9 إذا كنت تقصد التكافؤ العددي.
tolerance=0: 0.30000000000000004 ≠ 0.3
tolerance=1e-9: equal
ضوضاء الطوابع الزمنية والـ UUID
تتغير قيم createdAt وupdatedAt وrequestId وtraceId في كل طلب. استخدم ضبطات مسارات التجاهل المسبقة لحذفها.
Diff: 47 modifications (45 are timestamps)
Add /createdAt, /updatedAt, /requestId to Ignore paths → 2 real changes
حالات الاستخدام الشائعة
- انحدار استجابة الـ API
- قارن استجابات بيئة التجريب مع الإنتاج؛ تجاهل الطوابع الزمنية ومعرّفات الطلبات لإبراز التغييرات الفعلية في الحمولة فقط.
- فشل اختبارات اللقطة في CI
- الصق الفعلي مقابل المتوقع من اختبار Jest/Vitest الفاشل. صفِّ الضوضاء وابحث عن التغيير الحقيقي في ثوانٍ.
- تعارضات package-lock / yarn.lock
- حلّ تعارضات الدمج بمحاذاة الاعتماديات على الاسم؛ يتوقف ترتيب المفاتيح والحقول غير ذات الصلة عن كونها ضوضاء.
- تدقيق قيم K8s / Helm
- طابق بيئات وvolumeMounts ومنافذ بالاسم. اكتشف الترتيب غير المقصود مقابل تعديلات الإعداد الفعلية.
- تغطية ترجمة i18n
- قارن en.json مع zh.json هيكلياً للعثور على مفاتيح ترجمة مفقودة أو إضافية دون ضوضاء القيم.
- مراجعة خطط Terraform / CDK
- قارن ناتج الخطة عبر عمليات التشغيل؛ التسامح العددي يتعامل مع حسابات الفاصلة العائمة، وتتجاهل المسارات ARNs والطوابع الزمنية.
التفاصيل التقنية
- إخراج Patch متوافق مع RFC 6902
- يُولّد عمليات JSON Patch صالحة (add/remove/replace) مع مسارات RFC 6901. مُتحقَّق منه مقابل fast-json-patch@3.x وحزمة rfc6902 npm.
- اجتياز تكراري
- اجتياز بمكدس صريح (بدون تكرار) محدود بـ100,000 عقدة وعمق 64 لمنع تجاوز المكدس على المدخلات المعادية.
- المساواة العددية بـ Object.is
- التسامح العددي الافتراضي هو 0 — يستخدم Object.is لذا يُميَّز -0 عن +0. عيّن التسامح أكبر من 0 للمساواة المبنية على إبسيلون.
أفضل الممارسات
- صفِّ قبل المراجعة
- أضف مسارات التجاهل أولاً (الطوابع الزمنية، المعرّفات، حقول التتبع)، ثم اقرأ الفرق. مراجعة الفروق الصاخبة تدرّب العين على التخطي — وإغفال — التغييرات الحقيقية.
- المطابقة بالمفتاح للمجموعات المنطقية
- إذا كانت مصفوفتك تمثّل مجموعة غير مرتبة (بيئات، مستخدمون، اعتماديات)، استخدم المطابقة بالمفتاح. الفرق التسلسلي على المجموعات المنطقية يكون خاطئاً دائماً تقريباً.
- شارك الرابط لا المدخلات
- استخدم 'رابط المشاركة' لإرسال إعداد المرشح إلى زميل — لا تلصق JSON الحساس في مستندات مشتركة. يحتوي URL على الإعداد فقط.
الأسئلة الشائعة
لماذا يُظهر الفرق أن كل شيء تغيّر بينما غيّرت حقلاً واحداً فقط؟
كيف أتجاهل الطوابع الزمنية والمعرّفات في مقارنة JSON؟
ما الفرق بين JSON Patch والفرق المرئي؟
هل تعامل أداة JSON Diff القيمة null والمفتاح المفقود بنفس الطريقة؟
كيف تتم مقارنة المصفوفات — بالفهرس أم بالمفتاح؟
هل يمكنني تصدير الفرق كـ RFC 6902 JSON Patch؟
هل JSON Patch هو نفسه JSON Merge Patch (RFC 7396)؟
كيف أقارن ملفي JSON كبيرَين (أكثر من 10 ميجابايت)؟
هل ترسل الأداة بيانات JSON إلى خادم؟
لماذا يختلف 42 عن "42" في الفرق؟
هل يمكنني مقارنة JSON بتعليقات (JSONC) أو فواصل زائدة؟
كيف أقارن مصفوفات متداخلة من الكائنات بمفتاح مثل id؟
هل يتعامل الفرق مع دقة الفاصلة العائمة (0.1 + 0.2)؟
أدوات ذات صلة
عرض جميع الأدوات →محوّل Base64 — ترميز وفك ترميز أونلاين
الترميز والتنسيق
رمّز وفك ترميز Base64 مجاناً أونلاين — محوّل فوري مع دعم UTF-8 والرموز التعبيرية. خصوصية 100% — يعمل في متصفّحك. جرّبه الآن.
منسق JSON — التحقق والضغط وإصلاح الأخطاء
الترميز والتنسيق
نسّق JSON وتحقّق من صحته وأصلح الأخطاء فوراً — محرّر مجاني أونلاين يعمل في متصفّحك. يدعم الضغط والتجميل والتحويل. جرّبه الآن.
محوّل JSON إلى YAML
الترميز والتنسيق
الصق JSON واحصل على YAML فوراً. تحويل مباشر في متصفّحك، جاهز لـ Kubernetes وDocker Compose، مع حماية من مشكلة Norway. خصوصية 100%.
مرمّز ومفكك ترميز URL مع محلل روابط مدمج
الترميز والتنسيق
رمّز وفك ترميز روابط URL فوراً أونلاين — مع محلل روابط مدمج ووضعي encodeURI وencodeURIComponent. مجاني وخاص 100%. جرّبه الآن.
محوّل YAML إلى JSON
الترميز والتنسيق
الصق YAML واحصل على JSON فوراً. تحويل مباشر في متصفّحك. يدعم بيانات Kubernetes ومواصفات OpenAPI وقيم Helm. خصوصية 100%، بدون رفع ملفات.
محوّل الأنظمة العددية — ثنائي وست عشري وعشري وثماني
أدوات التحويل
حوّل بين الأنظمة الثنائية والست عشرية والعشرية والثمانية وأي أساس من 2 إلى 36 فوراً — أداة مجانية أونلاين تعمل في متصفّحك. جرّبها الآن.