كيف تعمل : تنسيق JSON
المحلّل مكتوب هنا، باليد، لا مستعار من المتصفح: لأن رسالة خطأ المتصفح لا يوحّدها أي معيار، ولأنها تختلف من متصفح إلى آخر. أما هذا فيقول السطر والعمود وما كان منتظَرا، في كل مكان بالطريقة نفسها.
ملف بصيغة JSON يرفضه برنامج، ورسالة خطأ لا تقول شيئا: هذا يوميّ من يعمل على إعداد أو على تصدير بيانات. فأول عمل المتحقِّق أن يقول أين بالضبط، وما الذي كان منتظَرا في ذلك الموضع.
ولهذا السبب كُتب المحلّل هنا بدل استعارته من المتصفح. فمعيار اللغة يفرض نوع الاستثناء الذي يرفعه المتصفح، لا نصه: فـFirefox يعطي السطر والعمود، وChrome يعطي موضعا بالبايتات، وSafari لا يعطي هذا ولا ذاك. فالأداة التي تنسخ هذه الرسالة تردّ تشخيصا مختلفا بحسب متصفح الشخص. أما أداتنا فتعدّ أسطرها وأعمدتها بنفسها.
وهي ترى ثلاثة أمور تبتلعها دالة المتصفح في صمت. المفاتيح المكررة: فالمعيار يقول إنها «ينبغي» أن تكون فريدة وإن سلوك البرنامج الذي يستقبل مكررا منها غير متوقع؛ وعمليا يمحو الأخير الأول، فتختفي بيانة بلا كلمة. وأنصاف حروف يونيكود التي بقيت وحدها، وهي لا ترمّز شيئا وتكسر نصف القرّاء في المصب. وعلامة ترتيب البايتات في رأس الملف، والمعيار يمنع إضافتها.
كيف تعمل
- الصقوا ملفكم بصيغة JSON. هو لا يغادر جهازكم، وهذا يهم في تصدير بيانات أو في إعداد يحمل معرّفات.
- اختاروا الإزاحة، وترتيب المفاتيح إن أردتم مقارنة ملفين بعد ذلك.
- إن كان JSON غير صالح، فاقرأوا السطر والعمود والرمز المنتظَر. وإن كان صالحا، فاقرأوا جدول التنبيهات: فهناك تختبئ المفاتيح المكررة.
الصيغ المقبولة
نص بصيغة JSON، كما يعرّفها المعيار: بلا تعليقات، وبلا فاصلة زائدة قبل قوس معقوف مغلق، وبلا مفتاح بلا علامتي اقتباس. وهذه الانحرافات الثلاثة شائعة، والأداة ترفضها مسمّية إياها، لأن البرنامج سيرفضها أيضا.
نص بصيغة JSON
حتى 400000 رمز. والنتيجة تُنزَّل بامتداد json. أو تُنسَخ بنقرة واحدة.
حدودها
تطبّق الأداة المعيار، من دون تسامحات بعض البرامج
التعليقات، والفواصل الزائدة، والمفاتيح بلا علامتي اقتباس تقبلها عدة أدوات تطوير، لكنها ليست JSON: فالمعيار لا ينص عليها، والبرنامج الذي يرفض ملفكم على حق. ونحن لا نقبلها أيضا، لأن متحقِّقا متساهلا سيترككم تظنون أن ملفكم سيمر في مكان آخر.
المفاتيح المكررة يُشار إليها، ولا تُصحَّح عنكم أبدا
يكتب المعيار أن أسماء الكائن ينبغي أن تكون فريدة، وأنها إن لم تكن كذلك صار سلوك البرنامج الذي يستقبل هذه البيانات غير متوقع. وعمليا، تحتفظ أغلب التنفيذات بالقيمة الأخيرة: فتختفي بيانة بلا كلمة. والأداة تسمّيها بمسارها وسطرها، لكن الملف المنسَّق يعكس الاختيار نفسه الذي يعكسه الجميع، أي القيمة الأخيرة، لأن العكس سيكون مفاجأة.
العدد الكبير جدا قد يفقد أرقاما، وليس ذلك من فعلنا
لغة المتصفح لا تعرف تمثيل الأعداد الصحيحة تمثيلا دقيقا إلا حتى نحو تسعة آلاف مليون مليار. فالمعرّف الأكبر من ذلك المكتوب في ملف JSON يفقد أرقاما بمجرد قراءته، في أي أداة تمر بهذه اللغة. ولهذا السبب تنقل الواجهات الجادة المعرّفات الكبيرة سلاسل بين علامتي اقتباس، وإن رأيتم واحدا عاريا في ملف، فتلك مشكلة قائمة قبلنا.
ترتيب المفاتيح محفوظ، إلا التي تشبه الأعداد
كائن جافاسكريبت يضع دائما المفاتيح المكتوبة كأعداد صحيحة في المقدمة، بترتيب تصاعدي، أيا كان موضعها الأصلي. وهذه قاعدة في اللغة، لا اختيار من عندنا، ولا تفلت منها أي أداة تمر بهذه اللغة. ففي كائن مفاتيحه «10» و«2» و«1»، يضيع الترتيب الأصلي. والإشارة إلى ذلك خير من السكوت عنه.
أسئلة عن هذه الأداة
هل تُرسَل بياناتي إلى مكان ما؟
لا، وهذا يهم هنا أكثر من غيره: فالإعداد بصيغة JSON يحمل غالبا معرّفات، وعناوين داخلية، وأحيانا مفاتيح وصول. تحققوا في ثلاثين ثانية: افتحوا أداة الفحص بمفتاح F12، وتبويب «الشبكة»، وأفرغوا القائمة، ثم الصقوا نص JSON وتحققوا منه. لن يظهر أي سطر. واقطعوا اتصالكم وأعيدوا الكرّة.
لماذا يُرفض نص JSON عندي وفيه تعليقات؟
لأنه ليس JSON. فالمعيار لا ينص على أي تعليق، وصاحبه شرح أنه أزالها عن قصد. وعدة أدوات تطوير تقبلها للراحة، وهذا يديم اللبس: فيمر ملفكم عندكم ويفشل في الإنتاج. ونحن نرفض للسبب الذي يجب أن يرفض من أجله المتحقِّق: أن نقول لكم الحقيقة عن حال ملفكم.
ما فائدة ترتيب المفاتيح؟
المقارنة. فتصديران للبيانات نفسها من برنامجين مختلفين يخرجان غالبا بترتيب مفاتيح مختلف: فتردّ المقارنة الخام مئات الفروق الكاذبة. رتّبوا الاثنين، ثم الصقوهما في أداة «مقارنة نصين» في الركن نفسه: فلن تبقى إلا الفروق الحقيقية. وهذه أنفع حيلة في هذه الصفحة.
تتحدثون عن مفاتيح مكررة: هل هي مسموحة حقا؟
يكتب المعيار أن أسماء الكائن «ينبغي» أن تكون فريدة، وأنها إن لم تكن كذلك صار سلوك البرنامج الذي يستقبل البيانات غير متوقع. فهي إذن لا ممنوعة ولا آمنة. وعمليا، تحتفظ أغلب التنفيذات بالقيمة الأخيرة وترمي الأولى بلا كلمة: فإن كان عندكم المفتاح «السعر» مرتين في الكائن نفسه، فأحد السعرين لم يعد موجودا أصلا. وهذا بالضبط نوع المشكلات التي نبحث عنها ساعتين، ولهذا نشير إليه.
معرّفي ذو التسعة عشر رقما يتغير بعد التنسيق.
نعم، وليس ذلك من فعلنا: بل هو حد في اللغة التي تستعملها كل المتصفحات، وهي لا تمثّل الأعداد الصحيحة تمثيلا دقيقا إلا حتى نحو تسعة آلاف مليون مليار. وفوق ذلك تتغير الأرقام الأخيرة منذ القراءة، في أي أداة تمر بهذه اللغة. ولهذا السبب تنقل الواجهات الجادة المعرّفات الكبيرة بين علامتي اقتباس، بوصفها سلاسل. فإن كان معرّفكم عاريا في الملف، فالمشكلة كانت قائمة قبلكم.
المحلّل مكتوب هنا، باليد، لا مستعار من المتصفح: لأن رسالة خطأ المتصفح لا يوحّدها أي معيار، ولأنها تختلف من متصفح إلى آخر. أما هذا فيقول السطر والعمود وما كان منتظَرا، في كل مكان بالطريقة نفسها.
التحققالبرهان، خطوة خطوةالتحقق بفاحص الشبكة، مشروحا حركة حركة، مع لقطات الشاشة.
الركنركن النصوص والبياناتالعدّ، والمقارنة، والتنسيق، والتنظيف. تلك الحركات الصغيرة التي تُضيّع ساعة حين لا تكون في المتناول.