ForHosting KIT · البيانات والملفات: تحويل وتنظيف

مقارنة كائنات JSON وكشف المفاتيح المتغيرة

قد تجعل المقارنة النصية تحديث JSON صغيراً يبدو مزدحماً، لأن المسافات البادئة وترتيب المفاتيح والتنسيق تحجب تغييرات البيانات الفعلية.

● Betaمجاني · داخل متصفحك
استخدمها من الويبAPIالبريدTelegramالتطبيق قريبًا

تعمل هذه الأداة داخل متصفحك — مجانًا، ولا تُرسل بياناتك إلى أي خادم

تقارن هذه الأداة القيم بعد تحليلها، وتصنف المفاتيح المضافة والمحذوفة والمتغيرة، وتتتبع الكائنات المتداخلة المشتركة، وتمنح كل نتيجة مسار JSON Pointer واضحاً. تحتفظ المصفوفات بترتيبها وتُقارن كوحدة كاملة. العملية حتمية ولا تستخدم الشبكة، وترفض المصفوفات والقيم الأولية وnull في المستوى الأعلى.

كيفية قراءة فرق JSON بنيوي

تقسم النتيجة الفروق إلى ثلاث مجموعات: المضاف والمحذوف والمتغير. لا يظهر العنصر المضاف إلا في الكائن المحدّث، ولا يظهر المحذوف إلا في الأصلي، أما المتغير فيتضمن القيمة السابقة واللاحقة. يستخدم كل عنصر مسار JSON Pointer يبدأ بشرطة مائلة؛ فالمسار /profile/name يشير إلى name داخل profile. تتحول الشرطة المائلة داخل اسم المفتاح إلى ~1 وتتحول علامة التلدة إلى ~0، وبذلك لا تختلط أسماء المفاتيح بالمستويات المتداخلة. تسير الأداة على المفاتيح بترتيب ثابت، فتنتج إجابة مستقرة. يلخص قسم counts عدد العناصر في كل فئة والإجمالي. وإذا كانت القوائم الثلاث فارغة، فالكائنان متساويان بنيوياً حتى لو اختلفت المسافات أو طريقة ترتيب المفاتيح في النص الأصلي.

التعامل مع الكائنات المتداخلة والمصفوفات

عندما يحمل المفتاح نفسه كائناً في الجانبين، تتابع المقارنة إلى الخاصية الدقيقة المختلفة. فإذا كان التغيير الوحيد في profile.active، يكون المسار /profile/active. أما المفتاح الموجود في جانب واحد فقط فيُسجل مرة واحدة مع قيمته الكاملة، من دون إنشاء سجل لكل عنصر فرعي. تُعامل المصفوفات كقيم JSON مرتبة وتُقارن كاملة؛ لذا فإن إضافة عنصر أو حذفه أو نقله أو تعديله تجعل خاصية المصفوفة متغيرة. تُقارن القيم الأولية وnull مباشرة، ويُعد تغير النوع تغييراً أيضاً. تنطبق قاعدة أشد على قيمتَي الجذر فقط: يجب أن يكون before وafter كائنَي JSON غير فارغين من null.

استخدام الفرق في المراجعة والأتمتة

ضع الكائن الأصلي في before والكائن المقترح في after. تعمل أداة المتصفح محلياً، بينما يكلف طلب API مبلغ $0.002 ويعيد البنية الحتمية نفسها. يمكنكم منع النشر عند حذف إعداد محمي، أو التأكد من تغير المسارات المعتمدة وحدها، أو حفظ فرق موجز لأغراض التدقيق. ولأن التنسيق وترتيب المفاتيح لا يولدان نتائج زائفة، تناسب الأداة ملفات الإعداد وWebhooks وأعلام الميزات والصلاحيات والاستجابات المطبّعة. عالجوا المسارات بصفتها JSON Pointer وراعوا فئة كل تغيير أيضاً. تعيد الأداة القيم الكاملة للمصفوفات، لتطبيق قواعد المجال عليها لاحقاً. وإذا كانت قيمة الجذر غير صالحة، فستظهر رسالة إدخال واضحة بدلاً من فرق فارغ ومضلل.

مراجعة إصدارات الإعداد

قارنوا الإعداد المنشور بالنسخة المرشحة وأظهروا التغييرات البنيوية من دون ضوضاء المسافات أو ترتيب المفاتيح.

تدقيق تطور Webhooks

سجلوا الحقول المتداخلة التي أضيفت أو حذفت أو تغيرت بين مثالين مطبّعين.

حماية الإعدادات المعتمدة

افحصوا المسارات في CI وأوقفوا النشر عند إزالة خيار محمي أو تغييره.

ما تنسيق المسار المستخدم في النتيجة؟

كل مسار هو JSON Pointer وفق نمط RFC 6901؛ تتحول الشرطة المائلة داخل المفتاح إلى ~1 والتلدة إلى ~0.

هل يُعد اختلاف ترتيب المفاتيح تغييراً؟

لا. تقارن الأداة المفاتيح والقيم، لذلك لا ينشأ فرق من اختلاف ترتيب التسلسل وحده.

كيف تُقارن المصفوفات؟

تُقارن كقيم مرتبة كاملة، وأي تعديل أو إضافة أو حذف أو إعادة ترتيب يجعل المصفوفة متغيرة.

هل يمكن مقارنة مصفوفتين في المستوى الأعلى؟

لا. يجب أن يكون before وafter كائنَي JSON غير مساويين لـ null، وإلا يظهر خطأ إدخال.

ما تكلفة طلب API؟

تعمل أداة الويب محلياً مجاناً. يطبق كل طلب API السعر الأساسي المنشور وقدره $0.002.

كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.

POSThttps://api.kit.forhosting.com/data/diff-json-objects

صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.

curl -X POST https://api.kit.forhosting.com/data/diff-json-objects \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"before":{"name":"Ada","profile":{"active":true,"score":8},"roles":["reader"]},"after":{"name":"Ada","profile":{"active":false,"score":8,"city":"London"},"roles":["reader","editor"]}}'
{
  "before": {
    "name": "Ada",
    "profile": {
      "active": true,
      "score": 8
    },
    "roles": [
      "reader"
    ]
  },
  "after": {
    "name": "Ada",
    "profile": {
      "active": false,
      "score": 8,
      "city": "London"
    },
    "roles": [
      "reader",
      "editor"
    ]
  }
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "data.diff_json_objects",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.

لكل طلب$0.002

السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.

max_mb25
HTTPالرمزالمعنى
401unauthorizedمفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك.
402insufficient_balanceرصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة.
404unknown_typeنوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب.
429rate_limitedتجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة.

اطّلع على توثيق KIT الكامل ←