المقالات

كيف تقارن JSON وتفهم الفروق

قارن استجابات API وملفات الإعدادات دون أن تشغلك فروق التنسيق، وافهم أثر المسارات والأنواع وترتيب المصفوفات ودقة الأعداد في النتيجة.

نُشر في حُدّث في قراءة 4 دقائق

الناشر TOOLFINAفُحصت المصادر وسلوك الأداة في تاريخ التحديث.

ابدأ بالسؤال الذي تريد إجابته

لديك استجابتان من API واختبار لا ينجح. إحداهما منسّقة والأخرى في سطر واحد بمفاتيح مرتبة بطريقة مختلفة. قد تُظهر المقارنة النصية اختلافاً في معظم المحتوى رغم أن التغيير الفعلي يخص إعداداً واحداً.

تساعدك المقارنة البنيوية على تحديد القيم أو الحقول أو الأنواع التي تغيّرت. ضع المستند الأقدم في الطرف الأصلي والأحدث في الطرف المحدّث حتى يكون معنى الإضافة والحذف واضحاً أثناء المراجعة.

ميّز تغيّر التنسيق من تغيّر البيانات

يحمل الكائنان {"a":1,"b":2} و{"b":2,"a":1} الخصائص نفسها. يعرّف RFC 8259 الكائن بوصفه مجموعة غير مرتبة، لذلك تطابق ToolFina الخصائص حسب الاسم. ولا تُنشئ المسافات وفواصل الأسطر خارج النصوص فروقاً أيضاً.

تبقى الأنواع مؤثرة في النتيجة. فالنص "false" يختلف عن القيمة المنطقية false، وتختلف null عن خاصية غائبة. كما تدخل المسافات داخل النص في قيمته؛ إذ تختلف "ready" عن "ready " بمسافة أخيرة.

افهم مثالاً صغيراً قبل مراجعة ملف كبير

قارن {"timeout":30,"debug":true} مع {"timeout":45,"debug":"true","retries":3}. يفترض أن ترى ثلاثة فروق: تغيّر قيمة /timeout، وتغيّر نوع /debug، وإضافة /retries. ولن يؤثر تبديل ترتيب هذه الخصائص في الفروق المكتشفة.

تتبع المسارات JSON Pointer المعرّف في RFC 6901. يعني /items/0/name خاصية name في أول عنصر من المصفوفة. وتُكتب الشرطة المائلة داخل اسم الخاصية بصيغة ~1، والموجة بصيغة ~0. أما تغيّر المستند كله فمساره فارغ وتعرضه الواجهة باسم الجذر.

حدّد إن كانت مواضع العناصر مهمة

تختلف المصفوفتان ["draft","published"] و["published","draft"] عندما يكون الترتيب مهماً، وهذه هي القاعدة الافتراضية. وتؤدي إضافة عنصر في البداية إلى إزاحة الفهارس اللاحقة، فتظهر عدة فروق دون أن يعني ذلك تعديل كل سجل.

قد تفضّل تجاهل الترتيب في قوائم الوسوم أو الصلاحيات. تطابق هذه الطريقة القيم كاملة في المستويات المتداخلة مع احتساب التكرار، لذلك تختلف [1,1,2] عن [1,2]. لكنها لا تربط الكائنات بحقل id، ويظهر الكائن المعدّل فيها مرة كحذف ومرة كإضافة.

انتبه إلى المعرّفات الرقمية وصحة الإدخال

قد يقرّب التحويل المعتاد إلى أعداد JavaScript المعرّفات الصحيحة الكبيرة. تحتفظ هذه الأداة بالنص الأصلي للعدد وتقارن قيمته العشرية بدقة، فتظل 9007199254740992 و9007199254740993 مختلفتين. وتُعد الصيغ 1 و1.0 و1e0 متساوية، وكذلك الصفر والصفر السالب.

صحّح أخطاء الصيغة قبل تفسير التقرير. لا تُقبل التعليقات والفواصل الزائدة ضمن JSON هنا. وتُرفض أسماء الخصائص المكررة لأن المحللات قد تختلف في القيمة التي تعتمدها. استخدم المدقّق المرتبط لإصلاح الحمولة، ثم أعد المستندين المصححين للمقارنة.

راجع التقرير واحتفظ بما تحتاجه

افتح مقارنة JSON، والصق المستندين أو افتح ملفين محليين بترميز UTF-8، واختر قاعدة المصفوفات ثم شغّل المقارنة. وسّع مساحة العمل للمستندات الطويلة، واختر أي فرق للانتقال إلى قيمه في المدخلين. ويمكنك تصفية نوع الفرق أو البحث بجزء من المسار للتركيز على حقول محددة.

يشمل النسخ والتنزيل جميع الفروق المسجلة مهما كانت التصفية الحالية. وتُحفظ القيم كنص JSON الأصلي للاحتفاظ بأرقامها وصيغتها؛ فالتقرير ليس JSON Patch. تظهر القيمة المختصرة على الشاشة كاملة في التصدير، أما تنبيه عدم اكتمال التقرير فيعني أن فروقاً أخرى لم تُسجّل.

  • تأكد من المستند الأصلي قبل تفسير الإضافات والحذف.
  • أبقِ ترتيب المصفوفات إذا كانت واجهتك تعتمد على مواضع العناصر.
  • راجع الحقول المحذوفة وتغيّر الأنواع قبل تحديث عميل API.
  • افحص تنبيه اكتمال التقرير وراجع قيمه قبل مشاركته.

حدود المتصفح والخصوصية

تجري المعالجة في علامة التبويب الحالية دون رفع المدخلات أو تخزينها. يقبل كل مستند حتى 200,000 حرف و20,000 قيمة و100 مستوى تداخل. ويجب أن تكون الملفات المحلية بترميز UTF-8 وألا تتجاوز 800 كيلوبايت. تُسجّل المقارنة حتى 1,000 فرق وتعرض جميع الفروق المسجلة أسفل المدخلين دون شريط تمرير داخلي، مع حد لحجم التقرير عند وجود مسارات أو قيم طويلة.

يمسح تعديل المستند أو تبديل الطرفين أو تغيير قاعدة المصفوفات النتيجة السابقة حتى لا تُفهم على أنها مقارنة حديثة. وتغادر التقارير علامة التبويب عند نسخها أو تنزيلها، وقد تضم قيماً خاصة. تعامل مع التقرير المحفوظ بالعناية نفسها التي تتعامل بها مع بياناته الأصلية.

المراجع

  • RFC 8259: صيغة تبادل بيانات JSON

    IETF / محرر RFC

    يعرّف أنواع JSON وخصائص الكائنات غير المرتبة والمصفوفات المرتبة، ويناقش مشكلات التوافق المتعلقة بتكرار الأسماء ودقة الأعداد.

  • RFC 6901: مسارات JSON Pointer

    IETF / محرر RFC

    يوضح طريقة تحديد قيمة JSON بالمسار، بما فيها مسار الجذر الفارغ وكتابة الشرطة المائلة والموجة داخل الأسماء.

جرّب هذه الأداة

قارن مستندَي JSON حسب القيم، واكتشف الحقول المضافة والمحذوفة، وراجع التغييرات جنباً إلى جنب دون رفع بياناتك.

مقارنة JSON وكشف الفروق

أدوات ذات صلة