نظرة عامة
منسّق JSON ينسّق ويصغّر ويتحقّق ويصلح ويستعلم في JSON داخل متصفحك. يشير للسطر والعمود لأي خطأ صياغي بدقة، يدعم السحب والإفلات للملفات، يتذكّر آخر إدخال بين عمليات إعادة التحميل، ويعرض وثائق بحجم عدّة ميغابايت دون تجميد التبويب. كل شيء يصير محلياً — لا رحلة لخادم، لا رفع.
بجانب التنسيق، تقدّر تستعلم بـ JSONPath لتنتزع قيماً من الوثيقة، تشتغل بعرض شجري تفاعلي مع تحرير مباشر، تستخدم «ترتيب المفاتيح» لمقارنات أكثر ثباتاً، تستخدم وضع «إصلاح» لحالات ملفات الإعدادات الواقعية (فواصل زائدة، تعليقات، إلخ)، تصدّر CSV لمصفوفات الكائنات، وتنسخ رابطاً دائماً يرمّز إدخالك في الـ URL لمشاركة عرض مطابق مع زميل.
متى تحتاجها
- قراءة جسم استجابة API راجع كسطر واحد مصغّر.
- ترتيب ملف إعدادات قبل إيداعه في الـ repo.
- التأكد إن الـ payload اللي راح ترسله بـ POST هو JSON صالح فعلاً.
- انتزاع قيمة من وثيقة متشعّبة بتعبير JSONPath مثل
$.users[?(@.role=='admin')].email. - تصدير مصفوفة سجلات بصيغة CSV لتفتحها في sheet.
- مشاركة payload فيه مشكلة مع زميل عبر رابط دائم، دون لصق JSON في Slack.
- مقارنة وثيقتي JSON (رتّب المفاتيح في كليهما، ثم استخدم مقارنة النصوص على الناتج المنسَّق).
كيف تشتغل
المحلّل الصارم هو JSON.parse المدمج في المتصفح، يعني التزام كامل بـ RFC 8259: لا فواصل زائدة، لا تعليقات، لا مفاتيح بدون اقتباس، لا اقتباس مفرد. عند فشل التحليل، نحوّل موقع رسالة الخطأ الأصلية لسطر وعمود حتى لا تعدّ الأقواس بنفسك. التنسيق يستخدم JSON.stringify(value, null, 2)، والتصغير يستخدم JSON.stringify(value) — نفس الأساس اللي تستخدمه بيئة التشغيل عندك.
وضع الإصلاح منفصل عن قصد: يجرّد التعليقات السطرية والكتلية، يحذف الفواصل الزائدة، ويسوّي علامات الاقتباس الذكية لمستقيمة، ثم يشغّل المحلّل الصارم على الناتج. ما يحاول تخمين مفاتيح غير مقتبسة أو اختراع أقواس مفقودة — لو الوثيقة مكسورة هيكلياً فلازم تعرف.
ترتيب المفاتيح يمشي بالشجرة تكرارياً ويعيد إصدار كل كائن بمفاتيح مرتّبة معجمياً. المصفوفات تحتفظ بترتيبها. هذه الحيلة للحصول على diff ثابت بين استجابتي API ما تختلفان إلا في ترتيب المفاتيح.
استعلامات JSONPath تُقيَّم بمقابل الوثيقة المُحلَّلة. القيم المطابِقة تُظلَّل في الشجرة وتُسرَد في لوحة النتائج. الفلاتر (?())، الـ wildcards (*)، النزول التكراري (..)، وشرائح المصفوفات ([start:end]) كلها مدعومة.
التحرير الشجري يخلّيك تنقر قيمة لتغيّرها في مكانها. التعديلات تُطبَّق على البنية المُحلَّلة وتُسلسَل لـ textarea، فالناتج المنسَّق والشجرة ما يختلفان أبداً. حالة الفرد/الطي تبقى عبر إعادة العرض حتى لا تفقد موضعك عند حفظ تعديل.
تصدير CSV يسطّح مصفوفة كائنات لصف header وصفوف قيم. الحقول المتشعّبة تُوصَل عبر dot-paths. السلاسل اللي فيها فاصلة، اقتباس، أو سطر جديد تُفلَت وفق RFC 4180.
الروابط الدائمة ترمّز الإدخال في الـ fragment (الجزء بعد #) بـ Base64 + ضغط بأسلوب LZ، فالـ JSON ما يلامس خادماً أبداً. الـ fragment يتسع بأريحية في شريط العنوان للـ payloads العادية (بضع كيلوبايتات)؛ الوثائق الضخمة تبقى محلية ويُعطَّل خيار الرابط الدائم.
ملاحظات
ليش نسخة استجابة API تفشل في التحليل؟ المتصفحات والتطبيقات الطرفية أحياناً تلصق علامات اقتباس ذكية (" و ") بدل المستقيمة ("). JSON يحتاج المستقيمة. المحلّل الصارم يحطّ مؤشّر الخطأ على أول علامة ذكية، أو وضع الإصلاح يسوّيها لك.
هل الملفات الكبيرة مدعومة؟ نعم. المحلّل يتعامل مع وثائق بحجم عدّة ميغابايت، والشجرة تستخدم virtualization فحتى مصفوفة بحجم 50 ميغابايت تبقى scrollable. ما فوق ذلك قد يتجمّد الـ main thread للحظة على خطوة التحليل نفسها؛ بهذا الحجم استخدم streaming parser مثل stream-json في Node.
ليش نتيجة JSONPath فارغة؟ تعابير JSONPath case-sensitive، ولازم تبدأ بـ $ للجذر. تعابير الفلتر تحتاج @ للعقدة الحالية — $.users[?(@.role=='admin')] ما $.users[?(role=='admin')].
هل الرابط الدائم يكشف بياناتي؟ لا. الـ payload المرمَّز يجلس في fragment الرابط (الجزء بعد #)، وهذا الجزء المتصفحات ما ترسله للخوادم. لو شاركت الرابط، متصفّح المُستلِم يفك ترميزه محلياً؛ TaskKit ما يراه أبداً.
هل هذه الأداة ترى بياناتي؟ لا. التحليل، التنسيق، تقييم JSONPath، الإصلاح، وتصدير CSV — كلها تصير في تبويبك. ما في خطوة رفع، ولا تحليلات على المحتوى، ولا معاينة ترسل النص لخادم.
أدوات ذات صلة
- JSON ↔ YAML — تحويل بين الصيغتين
- تحقّق JSON Schema — تحقّق من البنية بمقابل schema
- مقارنة النصوص — قارن وثيقتي JSON
- مقارنة TaskKit بـ jsonformatter.org — مصفوفة الميزات، استدعاءات الشبكة المُقاسة، وما الذي ترفعه كل أداة