مختبِر JSON Path

تعمل في المتصفح JSON والبيانات

اختبر استعلامات JSONPath تفاعلياً. يدعم صيغتي النقطة والأقواس المربعة، وأحرف البدل، والنزول التكراري (..)، وشرائح المصفوفات، والاتحادات، وتعبيرات التصفية مثل [?(@.price < 10)].

الخصوصية: تعمل هذه الأداة بالكامل في متصفحك. لا تغادر بياناتك جهازك أبداً.
جارٍ تحميل الأداة…

ما هو JSONPath؟

JSONPath لغة استعلام لاختيار القيم داخل مستند JSON، كما يختار XPath العُقد في XML: التعبير ‎$.store.book[*].author يلتقط كل مؤلف. جرى توحيدها عام 2024 في RFC 9535 الذي ثبّت الصياغة ومعنى المرشّحات التي اختلفت فيها التطبيقات السابقة.

كيفية استخدام مختبِر JSON Path

  1. الصق مستند JSON.
  2. اكتب تعبير JSONPath مثل $.store.book[?(@.price < 10)].title.
  3. افحص النتائج المطابقة؛ وانسخ القيم أو المسارات.

مزايا مختبِر JSON Path

  • صياغة JSONPath الأصلية (السابقة لـ RFC 9535): الوصول بالنقطة/الأقواس، وأحرف البدل، والنزول التكراري، والشرائح، والاتحادات، والتصفية بين قوسين
  • تعبيرات تصفية بالمقارنات والتعبيرات النمطية (=~) وin / nin والعمليات الحسابية والمنطق البولياني
  • تقييم آمن — دون eval()، إذ تُحلَّل التعبيرات إلى شجرة صياغة مجردة (AST)
  • النتائج كجدول (المسار والنوع والقيمة) ومصفوفة JSON بالقيم وقائمة بمسارات النتائج المطابقة
  • تقييم فوري أثناء تحرير التعبير أو المستند
  • أخطاء صياغة واضحة تشير إلى موضع المشكلة

مثال على مختبِر JSON Path

العثور على الكتب الرخيصة

الإدخال:

$.store.book[?(@.price < 10)].title

النتيجة:

$.store.book[0].title   "Sayings of the Century"
$.store.book[2].title   "Moby Dick"
يعمل كل مقطع على ما أعاده المقطع السابق؛ وداخل التصفية يمثّل @ كل كتاب بدوره، لذا لا يصل إلى .title إلا كتابان من الكتب الأربعة.
  1. 1$الجذر: المستند كله، عقدة واحدة
  2. 2.storeالابن store لتلك العقدة: كائن واحد$.store
  3. 3.bookالابن book: مصفوفة واحدة من 4 كتب$.store.book
  4. 4[?(@.price < 10)]تصفية بين قوسين: [?(…)]يختبر كل كتاب، حيث @ هو الكتاب قيد الاختبار. يبقى كتابان: book[0] 8.95، book[2] 8.99$.store.book[0] $.store.book[2]

    فرع: استُبعد كتابان: book[1] 12.99، book[3] 22.99

  5. 5.titleالابن title لكل كتاب باقٍ: نصّان$.store.book[0].title $.store.book[2].title

بعد ذلك:مطابقتان: "Sayings of the Century"، "Moby Dick"

تعبير المثال أعلاه، مطبَّقاً على مستند الأداة النموذجي («تحميل مثال»). تحت الخطوات 2–5: المسارات التي تعيدها كل خطوة.

الأسئلة الشائعة حول مختبِر JSON Path

ما ميزات JSONPath المدعومة؟

تتبع الأداة صياغة JSONPath الأصلية التي اعتمدتها معظم المكتبات قبل RFC 9535 (2024): صيغتا النقطة والأقواس المربعة، وأحرف البدل (*)، والنزول التكراري (..)، وفهارس المصفوفات بما فيها السالبة، والشرائح [start:end:step]، والاتحادات [0,2] و["a","b"]، والتصفية [?(…)]، وصيغة البرنامج النصي (@.length-1). ولا تُقبل صيغ RFC 9535 المختلفة عنها: فالتصفية تحتاج إلى قوسين ([?(@.price < 10)] لا [?@.price < 10])، والدوال length() وcount() وmatch() وsearch() وvalue() غير متاحة.

ماذا يمكنني كتابته داخل التصفية؟

المقارنات (==, !=, <, <=, >, >=)، والتعبيرات النمطية (@.name =~ /^a/i)، والانتماء (@.tag in ["a","b"])، ووجود الخاصية (@.isbn)، والعمليات الحسابية والمعاملات المنطقية (&&, ||, !). كما يُسمح بالإشارة إلى الجذر ($). والمعاملات =~ وin وnin وcontains امتدادات من مكتبات أقدم، وليست من صياغة RFC 9535.

هل تقييم التصفية آمن؟

نعم. تُحلَّل التعبيرات إلى شجرة صياغة مجردة صغيرة وتقيّمها الأداة بنفسها — ولا يُستخدم eval() أو Function() أبداً، لذا لا يمكن تنفيذ أي كود عشوائي.

ما المسار المعروض لكل نتيجة مطابقة؟

هو الموقع الفريد للنتيجة بصيغة النقطة/الأقواس، مثل $.store.book[2].title. استخدمه للإشارة إلى القيمة بدقة في الاختبارات أو التوثيق. وهو ليس «المسار المعياري» (Normalized Path) الذي يعرّفه RFC 9535، إذ يستخدم ذلك الأقواس وحدها مع أسماء بين علامتي اقتباس مفردتين: $['store']['book'][2]['title'].

ملاحظات تقنية

يُقسَّم المسار إلى رموز (tokens) تمثّل مقاطع مختلفة (ابن، حرف بدل، فهرس، شريحة، اتحاد، تصفية، برنامج نصي). وتُترجم عبارات التصفية إلى شجرة تعبيرات صغيرة تدعم المعاملات ==، !=، <، <=، >، >=، =~، in، nin، contains، &&، ||، !، والسالب الأحادي، و+ − * / %. أما المقارنات بين أنواع غير متطابقة فتُقيَّم إلى false، على غرار سلوك مكتبات JSONPath الشائعة.

المراجع