البيانات

CSV وJSON وYAML

تحمل ثلاث صيغ معظم البيانات المنظمة في العالم. والتحويل بينها سهل؛ لكن التحويل دون إفساد شيء بصمت يحتاج إلى قليل من العناية.

نُشر في

ما الغرض من كل منها

CSV جدول: صفوف وأعمدة ولا شيء غيرها. يمكن قراءته في كل مكان، وحجمه صغير جدًا، ولا يستطيع التعبير عن أي شيء متداخل. وJSON شجرة، أي كائنات داخل مصفوفات داخل كائنات، وهو ما تتحدث به تقريبًا كل واجهات API على الويب. وYAML يعبّر عن البنى نفسها التي يعبّر عنها JSON لكن بالمسافات البادئة بدلًا من الأقواس المعقوفة، مما يجعله أكثر راحة للبشر في القراءة والتعديل، ولهذا اتجهت ملفات الإعدادات إليه.

فخ تحويل الأنواع

هذا هو الأمر الذي يكلّف الناس مالًا فعلًا. يحتوي CSV على نص فقط، ولا توجد طريقة لوسم قيمة بأنها رقم أو تاريخ أو سلسلة. لذلك تخمّن المحوّلات، وتكون التخمينات خاطئة في كثير من الأحيان:

  • رمز بريدي مثل 01234 يصبح الرقم 1234 فيفقد الصفر في البداية.
  • رمز منتج مثل 1-2 يصبح تاريخًا.
  • رقم حساب طويل يصبح فاصلة عائمة ويفقد أرقامه الأخيرة.
  • NA، أي أمريكا الشمالية، تصبح «غير متاح».

وكل واحدة من هذه تحدث بصمت. ولهذا ينبغي لتحويل CSV إلى JSON الحريص أن يترك كل قيمة سلسلة نصية ويدعك تقرر، وهو ما يفعله محوّل هذا الموقع عمدًا، وإن بدا متزمتًا في البداية.

ما الذي لا ينجو من الانتقال إلى CSV

التداخل. مصفوفة JSON من كائنات مسطحة تصبح جدولًا نظيفًا. وبمجرد أن تكون القيمة نفسها كائنًا أو مصفوفة، لا يوجد عمود تُوضع فيه. والخيارات هي التسطيح بمفاتيح مركبة، أو تحويل الجزء المتداخل إلى نص داخل خليته، أو حذفه، وحذفه بصمت هو الأسوأ بين الثلاثة. أما كتابته نص JSON داخل الخلية فتُبقي البيانات قابلة للاسترجاع على الأقل.

الحواف الحادة في YAML

YAML ممتع في القراءة وسهل الخطأ فيه على نحو غير معتاد.

  • المسافات البادئة هي البنية، ولا تُسمح علامات التبويب. مسافة في غير موضعها تغيّر المعنى بدلًا من أن تسبب خطأ.
  • بعض الكلمات المجردة قيم منطقية. في YAML الأقدم تُحلَّل y وn وon وoff وyes وno كلها كـ true أو false، فعمود دول يحتوي على NO للنرويج يصبح false. ضعها بين علامات اقتباس.
  • تختفي التعليقات عند التحويل إلى JSON، لأن JSON لا يملك طريقة لتمثيلها.

الدورة الكاملة غير مضمونة

تحويل JSON إلى YAML والعودة يعيد عادةً ما بدأت به. أما تحويل CSV إلى JSON والعودة فلا يعيده عادةً: فأسلوب علامات الاقتباس وترتيب الأعمدة للسجلات ذات الأشكال المختلفة وتمثيل القيم الفارغة كلها خيارات، وتختار الأدوات المختلفة اختيارات مختلفة. إذا كان لا بد أن تكون الدورة الكاملة دقيقة، فتحقق منها بدلًا من افتراضها.

للانتقال بينها: حوّل CSV إلى JSON، أو حوّل JSON إلى CSV، أو حوّل JSON إلى YAML، وتحقق من النتيجة، لأن الدورة الكاملة ليست دقيقة دائمًا.