الثلاث تصف الشيء نفسه: خرائط متداخلة وقوائم من السلاسل والأرقام والقيم المنطقية. التحويل بينها آلي. فالاختيار ليس عن القدرة، بل عمّن سيكتب.
JSON للنقل
صُمّم لتنتجه البرامج وتستهلكه، وكل شيء فيه ينبع من ذلك. القواعد صارمة، فثمّة طريقة واحدة بالضبط لقراءة أي مستند. الأقواس المعقوفة والمربّعة تعني أن المسافات البيضاء لا تهمّ. كل محلّل يتّفق مع غيره.
الصرامة ميزة أثناء النقل وعبء في ملف يصونه إنسان. لا تعليقات. لا فواصل لاحقة — وهذه أغلاها ثمنًا، لأن إضافة سطر إلى آخر قائمة تعني تحرير السطر الذي فوقه. المفاتيح يجب أن تكون بعلامتي اقتباس مزدوجتين. لا شيء متسامح.
لاستجابة واجهة برمجية، أو سطر سجلّ، أو أي شيء تكتبه آلة، هذا صحيح تمامًا.
YAML للتحرير
الإزاحة تحلّ محلّ الأقواس المعقوفة، وعلامات الاقتباس اختيارية غالبًا، والتعليقات مسموحة، والسلاسل الطويلة يمكن كتابتها على أسطر عدّة بلا تهريب. ملف YAML يُقرأ كمستند، ولهذا استولى على الإعدادات.
كل ما يجعلها مريحة يجعلها أيضًا سهلة الخطأ على نحو خفيّ. الإزاحة ذات معنى، فمسافة شاردة واحدة تغيّر البنية. محرف الجدولة خطأ في القواعد، وعلامات الجدولة غير مرئية. المواصفة كبيرة على نحو مشهور، والمحلّلات تختلف عند الأطراف.
استنتاج الأنواع الذي لا يكفّ عن إيقاع الناس
هذا هو الشيء المحدّد الجدير بمعرفته قبل أن تكتب أي YAML.
القيمة غير المقتبَسة تُؤوَّل لا تُؤخذ حرفيًّا. تحت YAML 1.1 — وهو ما زال ما تطبّقه محلّلات كثيرة منشورة — تصير NO قيمة منطقية false، فيتحوّل رمز دولة النرويج إلى false على نحو لا يُنسى. ON وOFF وYES وY قيم منطقية أيضًا.
الأرقام أسوأ. إصدار مكتوب 1.20 يصير الرقم 1.2 ويفقد صفره اللاحق. قيمة تبدأ بصفر قد تُقرأ ثمانيّة. شيء مثل 6e2 — وهو بداية معقولة لبصمة git — يصير 600. عنوان MAC بنقطتيه الرأسيتين يمكن أن يُقرأ رقمًا ستّينيًّا.
العلاج محرف واحد: اقتبس كل ما يُقصد به سلسلة نصّية. يستحقّ أن يكون سلوكك الافتراضي لا أن تفعله حين تنتبه.
TOML للإعدادات المسطّحة في معظمها
تعليقات، وقواعد واضحة، ولا مسافات بيضاء ذات معنى، ولا استنتاج أنواع يفاجئك — القيم تعني ما تقوله. لملف إعدادات تطبيق، هي أسهل الثلاث ضبطًا.
تصير محرجة مع التداخل العميق، حيث تتحوّل قواعد ترويسة الجدول إلى أسماء طويلة منقّطة، ومع القوائم الطويلة من الكائنات. هناك بالضبط تبقى YAML قابلة للقراءة، ولهذا تكون إعدادات النشر وخطوط المعالجة YAML وتكون بيانات الحزم الوصفية TOML على نحو متزايد.
كيف تختار
آلة تكتبه وآلة تقرؤه — JSON. الأسرع تحليلًا، مدعوم في كل مكان، بلا لبس.
إنسان يحرّره وله بنية حقيقية — YAML. خطوط المعالجة، وعمليات النشر، وكل ما فيه قوائم خطوات.
إنسان يحرّره وهو إعدادات في معظمه — TOML.
يجب أن يقرأه الاثنان — JSON، مع توليد الإعدادات من شيء آخر. صيانة JSON باليد هي الموضع الذي يؤلم فيه غياب التعليقات أشدّ ما يكون.
التحويل بينها
التحويل يفقد شيئًا في اتّجاه واحد لا غير: التعليقات لا تنجو. تحويل YAML إلى JSON يرمي كل ملاحظة شارحة في الملف، والتحويل عكسًا لا يعيدها.
هذا يستحقّ القول لأنه غير بديهي ولا رجعة فيه. إن كان ملف YAML موثّقًا — والجيّد منها موثّق — فعامله مصدرًا وولّد منه JSON، بدل الذهاب والإياب.
التحويل عدا ذلك آلي، أما تنسيق مستند JSON فيستحقّ الفعل قبل قراءته — فالاستجابة المصغّرة جدار، والبيانات نفسها بإزاحة تكون بديهية عادةً.
الخلاصة
JSON للنقل، وYAML لإعدادات مبنيّة يصونها إنسان، وTOML للإعدادات. اقتبس سلاسل YAML عندك. تذكّر أن التحويل بعيدًا عن YAML يرمي التعليقات إلى غير رجعة.