نظرة عامة
منسّق 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 — مصفوفة الميزات، استدعاءات الشبكة المُقاسة، وما الذي ترفعه كل أداة