أداة اختبار مسارات JSON (JSONPath)

قم بلصق مستند بصيغة JSON، ثم أدخل تعبيرًا من نوع JSONPath مثل $..book[?(@.price<10)]. سيقوم أداة الاختبار بتقييم هذا التعبير بالنسبة للمستند ويعرض جميع القيم المطابقة مع المسار الدقيق لكل قيمة مطابقة. يُعد هذا أداة مفيدة للتحقق من صحة الاستعلام الذي ستقوم بإدخاله في سكريبت أو مواصفة واجهة برمجة التطبيقات (حيث تدعم كل من Postman وk6 وJMeter استخدام JSONPath).

كيفية اختبار تعبير JSONPath

  1. 1

    لصق مستند JSON

    أي ملف JSON صالح، كائن، مصفوفة، أو مصفوفة معقدة ذات تضمين عميق.

  2. 2

    أدخل التعبير

    ابدأ باستخدام `$` كجذر، واستخدم `.` كعنصر فرعي، و`..` للنزول التكراري، و`[*]` كرمز عشوائي (wildcard).

  3. 3

    شاهد التطابقات مباشرةً

    يتم عرض كل تطابق مع قيمته ومسار JSONPath الكامل الخاص به، مع إبرازه في المستند الأصلي.

  4. 4

    قم بنسخ النتائج.

    قم بنسخ المطابقات كمصفوفة JSON، أو نسخ كل مسار على حدة لاستخدامه في الكود اللاحق.

مرجع صيغة JSONPath

التعبير المعنى
$ العنصر الجذري
$.store طفل من $ يُسمى store
$["store"] نفسه، على شكل قوس
$..author جميع خصائص author على أي عمق
$.store.book[*] جميع الكتب في المتجر
$.store.book[0] الكتاب الأول
$.store.book[-1:] الكتاب الأخير
$.store.book[0:2] الكتابان الأولان (جزء)
$.store.book[?(@.isbn)] الكتب التي تحتوي على الخاصية isbn
$.store.book[?(@.price < 10)] كتب بأسعار أقل من 10
$.store.book[?(@.category == "fiction")] كتب خيالية
$..* كل قيمة، في كل مكان

تعبيرات التصفية

تستخدم تعبيرات التصفية الرمز @ للإشارة إلى العقدة الحالية. ويدعم جهاز الاختبار المعاملات الشائعة التالية: ==، !=، <، >، <=، >=، &&، ||، بالإضافة إلى التعبير النمطي (regex) =~.

$.items[?(@.qty >= 10 && @.price < 50)]

لهجات JSONPath

توجد عدة تنفيذات لـ JSONPath تتميز ببعض التناقضات البسيطة. تلتزم أداة الاختبار هذه بالمواصفة الأصلية لـ Goessner وتحسينات RFC 9535، وهي متوافقة مع:

  • جايواي جيس باث (جاوا)
  • jsonpath-plus (لغة جافا سكريبت)
  • jsonpath-rw (بايثون)
  • التعبيرات الأساسية عن المسار في jq

تُشار إلى الميزات غير المتوافقة (مثل التعبيرات النصية التي تتضمن كود JavaScript عشوائيًا) في لوحة الأخطاء.

متى يتفوق JSONPath على محلل كامل

  • تأكيدات الاختبار: تستقبل أداة pm.expect(jsonData).to.have.jsonPath(...) الخاصة بـ Postman مسارًا.
  • استخراج الإعدادات: استخراج قيمة واحدة من رد واسع النطاق من واجهة برمجة التطبيقات دون الحاجة إلى أي مكتبة.
  • سكريبتات اختبار التحميل: تدعم كل من k6 وJMeter وGatling استخدام JSONPath في عمليات التحقق.
  • Kubernetes / AWS CLI: تتيح علامتا --query و--jsonpath تحديد شكل الناتج من سطر الأوامر.

الأخطاء الشائعة

  • استخدام . على المصفوفة: قيمة $.users.0.name خاطئة؛ استخدم $.users[0].name.
  • نسيان الرمز .. عند تحديد العمق: يتطابق مسار مثل $.name فقط مع المستوى الأعلى name؛ لذا استخدم $..name في جميع الحالات.
  • الخلط بين JSONPath وjq: يُعد jq مجموعة شاملة تشمل التدفق التحكمي والتحويلات، بينما يُستخدم JSONPath حصريًا لاستخراج البيانات.
  • التثبيت في التعبير النمطي (regex): يتطابق =~ /foo/ مع السلاسل النصية الجزئية؛ استخدم /^foo$/ للتطابق الدقيق.

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

JSONPath هو لغة استخراج خالصة تتيح عمليات الاختيار والتصفية والتقسيم. أما jq فهو لغة استعلام وتحويل متكاملة تدعم تدفق التحكم والمتغيرات والدوال. بالنسبة لعمليات الاستخراج البسيطة، يُعد JSONPath أكثر قابلية للنقل؛ أما بالنسبة للتحويلات، فيُفضل استخدام jq.

مواصفات جويسنر الأصلية مع التحسينات الواردة في RFC 9535، وهي متوافقة مع JaywayJsonPath (باللغة جافا) وjsonpath-plus (في نظام نود). لا تُدعم الإضافات الخاصة بكل لهجة (مثل التعبيرات السكريبتية التي تحتوي على كود عشوائي).

نعم، يتطابق $..book[?(@.title =~ /^Harry.*/)] مع جميع الكتب التي يبدأ عنوانها بـ “Harry”. أما ^ و$ فيُستخدمان للتطابق الكامل.

نعم، كل من JSON ومُقيِّم JSONPath موجودان داخل متصفحك؛ ولا يغادر المستند أو الاستعلامات المتصفح أبدًا.

أدوات ذات صلة

الأداة متاحة بلغات أخرى