مولّد JSON Patch

قارن مستندَي JSON واحصل على رقعة RFC 6902 التي تحوّل الأول إلى الثاني. كل شيء يعمل داخل متصفحك.

ما الذي تفعله هذه الأداة


تقارن مستندَي JSON وتكتب قائمة العمليات التي تحوّل الأول إلى الثاني، بالصيغة التي يحددها RFC 6902. وبدل إرسال مستند كامل لتقول إن حقلًا واحدًا تغيّر، ترسل التغيير نفسه.

متى تستعملها


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

العمليات التي يولّدها


العمليةما تعنيه
addتضيف قيمة حيث لم تكن هناك قيمة، أو تُدرج داخل مصفوفة.
removeتحذف القيمة في ذلك الموضع.
replaceتكتب فوق القيمة في موضع موجود سلفًا.
moveتنقل قيمة من موضع إلى آخر.
copyتنسخ قيمة إلى موضع آخر.
testتتحقق من قيمة وتلغي الرقعة كلها إن لم تطابق.

تكتب هذه الأداة add وremove وreplace فقط. وهذه الثلاث تكفي للتعبير عن أي تغيير، ورقعة تُقرأ سطرًا سطرًا أثمن من أخرى أقصر تحتاج إلى حلّ ألغازها. أما الثلاث الأخرى فهي جزء من RFC 6902 ويقبلها أي خادم متوافق.

كيف تعمل المسارات


كل مسار هو JSON Pointer (RFC 6901): طريق مفصول بشرطات مائلة يبدأ من جذر المستند، فـ ”/address/zipCode“ تعني حقل zipCode داخل address. ومواضع المصفوفة أرقام، فـ ”/skills/0“ هو العنصر الأول، والشَّرطة تعني نهاية المصفوفة: ”/skills/-“ تُلحق في الآخر. ولأن الشرطة المائلة هي الفاصل، يُكتب المفتاح الذي يحويها بالصيغة ~1، وتُكتب علامة التلدة الحرفية ~0.

ملاحظات على الناتج


المقارنة حرفية: تقابل القيم موضعًا بموضع، فإدراج عنصر في بداية مصفوفة يولّد replace لكل عنصر بعده بدل إدراج واحد. أما مصفوفات الكائنات ذات المعرّفات الثابتة، فالرقعة المولّدة من المعرّفات تكون دائمًا أصغر من المولّدة من المواضع.

كيف تولّد JSON Patch


الصق مستندَي JSON وولّد الرقعة.

  1. الصق JSON الأصلي على اليسار.
  2. الصق JSON المعدّل على اليمين.
  3. اضغط توليد، ثم انسخ الرقعة.

أسئلة شائعة


هل ترفع هذه الأداة بياناتي إلى أي مكان؟
لا. يبقى المستندان في متصفحك وتُولَّد الرقعة على جهازك أنت.

هل الناتج متوافق مع RFC 6902؟
نعم. كل عملية كائن فيه op وpath — ومعهما value في add وreplace — والمسارات هي JSON Pointer كما يعرّفها RFC 6901.

هل يتضمن عمليتي move وcopy؟
لا. يكتب add وremove وreplace، وهي تكفي لأي تغيير وأيسر في القراءة بكثير. وما move إلا remove يتبعه add.

كيف أطبّق الرقعة؟
أرسلها إلى واجهة برمجية تقبل application/json-patch+json، أو استعمل مكتبة: jsonpatch في بايثون، وjson-patch في جافاسكريبت، وJsonPatchDocument في .NET، وjson-patch في جافا، وهكذا.

ما الفرق عن JSON Merge Patch؟
يشبه JSON Merge Patch (RFC 7386) المستند نفسه، وفيه null تعني ”احذف“. هذا يجعله سهل القراءة لكنه عاجز عن حفظ null حقيقية أو عن تعديل عنصر واحد في مصفوفة. أما JSON Patch فأطول لكنه يعبّر عن كل شيء.

Wikipedia — JSON Patch
Wikipedia — JSON
Wikipedia — Patch (computing)
Wikipedia — Diff
Wikipedia — REST