Skip to content

JSON Diff مقارنة

قارن ملفي JSON فوراً في متصفحك. عرض جنباً إلى جنب مع تمييز الفروق، وإخراج JSON Patch (RFC 6902)، وتجاهل الحقول المزعجة كالطوابع الزمنية والمعرّفات. خصوصية تامة، بدون رفع ملفات.

بدون تتبّع يعمل في المتصفّح مجاني
مسارات التجاهل:
خيارات متقدمة
وضع المصفوفة
Reviewed for RFC 6902/6901 compliance and edge cases including null vs missing keys, type drift, floating-point precision, and array key alignment. — Go Tools API Tooling Team · May 4, 2026

ما هو 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. 1

    الصق كلا مستندَي JSON

    الصق JSON الأصلي (يسار) والمعدَّل (يمين). يُعرض الفرق مباشرةً أثناء الكتابة؛ المدخلات الكبيرة (أكثر من 200 كيلوبايت) تنتقل إلى زر 'الفرق' اليدوي.

  2. 2

    صفِّ الضوضاء

    انقر على ضبط مسبق (الطوابع الزمنية / المعرّفات / التتبع) أو الصق أنماط JSON Pointer الموسّعة في 'مسارات التجاهل' لحذف الحقول غير ذات الصلة.

  3. 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 على الإعداد فقط.

الأسئلة الشائعة

لماذا يُظهر الفرق أن كل شيء تغيّر بينما غيّرت حقلاً واحداً فقط؟
ثلاثة أسباب شائعة: (1) ترتيب مفاتيح مختلف — تعتبر أداة JSON Diff ترتيب المفاتيح متكافئاً، بخلاف أدوات فرق النص؛ (2) الطوابع الزمنية وUUIDs والمعرّفات التلقائية التي تتغير في كل طلب — أضفها إلى مسارات التجاهل؛ (3) ترتيب المصفوفات، عندما لا ينبغي تطبيق المقارنة بالفهرس — غيّر وضع المصفوفة إلى 'المطابقة بالمفتاح'.
كيف أتجاهل الطوابع الزمنية والمعرّفات في مقارنة JSON؟
استخدم حقل 'مسارات التجاهل' أعلاه. انقر على الضبط المسبق 'الطوابع الزمنية' أو 'المعرّفات' لتصفية /createdAt و/updatedAt و/*Id و/*At و/requestId بنقرة واحدة. يمكنك أيضاً لصق أنماط JSON Pointer الموسّعة — سطر واحد لكل نمط — للتصفية المتقدمة.
ما الفرق بين JSON Patch والفرق المرئي؟
الفرق المرئي (جنباً إلى جنب) مخصص للبشر — مراجعة التغييرات بالعين. أما JSON Patch (RFC 6902) فهو للآلات — مصفوفة عمليات منظمة (add/remove/replace) يمكنك تطبيقها باستخدام حزم npm مثل fast-json-patch أو rfc6902. نفس الفرق، إخراجان مختلفان.
هل تعامل أداة JSON Diff القيمة null والمفتاح المفقود بنفس الطريقة؟
لا. القيمتان {"a":null} و{} مختلفتان — الأولى تحتوي على null صريح، والثانية لا تحتوي على مفتاح. الأنظمة الحقيقية تتصرف بشكل مختلف للحالتين؛ تحافظ هذه الأداة على التمييز بينهما.
كيف تتم مقارنة المصفوفات — بالفهرس أم بالمفتاح؟
بالفهرس (تسلسلي) بشكل افتراضي. غيّر إلى 'المطابقة بالمفتاح' وأدخل حقل المفتاح (عادةً id) لمحاذاة العناصر بغض النظر عن الترتيب. استخدم هذا لبيئات K8s، وإدخالات package-lock، أو أي قائمة منطقية غير مرتبة.
هل يمكنني تصدير الفرق كـ RFC 6902 JSON Patch؟
نعم. يُخرج تبويب JSON Patch مصفوفة عمليات RFC 6902 صالحة. إذا كانت مسارات التجاهل مُعيَّنة، يُصفَّى الـ patch (يُظهر التبويب '(مُصفَّى: يستثني {n} مساراً مُتجاهلاً)') ولن يُعيد الملفات الأصلية بالضبط. امسح مسارات التجاهل للحصول على patch كامل.
هل JSON Patch هو نفسه JSON Merge Patch (RFC 7396)؟
لا. RFC 6902 (JSON Patch) عبارة عن مصفوفة عمليات مرتبة — صريحة وقابلة للعكس. أما RFC 7396 (Merge Patch) فهو مستند دمج واحد — أبسط لكنه لا يستطيع تمثيل الحذف بشكل مختلف عن تعيين القيمة null. تُخرج هذه الأداة RFC 6902.
كيف أقارن ملفي JSON كبيرَين (أكثر من 10 ميجابايت)؟
الملفات التي تتجاوز ~5 ميجابايت تتخطى الذاكرة العملية للمتصفح. يُعطَّل الوضع المباشر عند 200 كيلوبايت؛ للملفات متعددة الميجابايت، استخدم jq في سطر الأوامر أو fast-json-patch في Node.
هل ترسل الأداة بيانات JSON إلى خادم؟
لا. تعمل جميع المقارنات محلياً في متصفحك. لا تُكتب المدخلات على القرص أو الشبكة أو localStorage أو معاملات URL. تمسحها إعادة تحميل الصفحة. يكتب زر 'رابط المشاركة' إعداداتك فقط (وضع المصفوفة، مسارات التجاهل) — وليس بياناتك.
لماذا يختلف 42 عن "42" في الفرق؟
أداة JSON Diff صارمة بالنوع: الرقم 42 والسلسلة "42" ليسا متساويين. هذا يكتشف الانحراف في تسلسل backend (بعض النقاط النهائية تُعيد معرّفات رقمية، وأخرى تُعيد سلاسل) — الفرق يُسمّيها تعديل 'النوع'.
هل يمكنني مقارنة JSON بتعليقات (JSONC) أو فواصل زائدة؟
معيار JSON (RFC 8259) لا يسمح بالتعليقات أو الفواصل الزائدة. تستخدم هذه الأداة JSON.parse الأصلية التي ترفض كليهما. أزل التعليقات أولاً باستخدام JSON Formatter.
كيف أقارن مصفوفات متداخلة من الكائنات بمفتاح مثل id؟
عيّن وضع المصفوفة إلى 'المطابقة بالمفتاح' وأدخل id. يحاذي الفرق بقيم id. v1 يطبّق نفس حقل المفتاح في كل عمق للمصفوفة؛ المصفوفات الداخلية التي تفتقر إلى هذا الحقل تعود إلى التسلسلي وتُصدر تحذيراً.
هل يتعامل الفرق مع دقة الفاصلة العائمة (0.1 + 0.2)؟
نعم، مع التسامح العددي. القيمة الافتراضية هي 0 مع Object.is — لذا يُشار إلى -0 مقابل +0. عيّن التسامح على ضوء إبسيلون صغير (مثلاً 1e-9) وستتساوى 0.1 + 0.2 مع 0.3. ينطبق التسامح فقط على الأوراق الرقمية.

أدوات ذات صلة

عرض جميع الأدوات →

محوّل 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 فوراً — أداة مجانية أونلاين تعمل في متصفّحك. جرّبها الآن.