مهندس DevOps يصدّر إعدادات Kubernetes كـ YAML لكنه يحتاج لإرسالها إلى API لا يقبل إلا JSON. محلل يتلقى بيانات استجابة API بتنسيق JSON لكنه يحتاجها في جدول بيانات. عالم بيانات يصدّر CSV من قاعدة بيانات لكنه يحتاج JSON منظمًا للوحة تحكم ويب.
تحويل الصيغ ليس مجرد عملية آلية. كل صيغة تقدم مقايضات مختلفة، وفهم ما يُفقد في التحويل لا يقل أهمية عن معرفة كيفية التحويل.
ثلاث صيغ، ثلاث فلسفات
كل صيغة صُممت لجمهور مختلف ومشكلة مختلفة:
| الصيغة | النشأة | صُممت لـ | الفلسفة الأساسية |
|---|---|---|---|
| CSV | ~1972 | تبادل البيانات بين البرامج | أقصى بساطة — مجرد صفوف وأعمدة |
| JSON | 2001 | تبادل بيانات الويب | بيانات منظمة قابلة للقراءة آلياً بقواعد صارمة |
| YAML | 2001 | ملفات الإعدادات | بيانات منظمة قابلة للقراءة بشرياً بحد أدنى من البنية |
CSV تفترض أن بياناتك جدول مسطح. كل قيمة هي نص. لا يوجد مفهوم للتداخل أو الأنواع أو البيانات الوصفية.
JSON تفترض أن بياناتك لها هيكل — كائنات ومصفوفات وأنواع (نصوص وأرقام وقيم منطقية وnull). صارمة وغير غامضة، مما يجعلها مثالية للآلات لكنها مطوّلة للبشر.
YAML تفترض أن إنساناً سيقرأ الملف ويحرره. تستخدم المسافات البادئة بدلاً من الأقواس، وتدعم التعليقات، ولها بنية أكثر مرونة. تقنياً، YAML هي مجموعة شاملة من JSON — أي مستند JSON صالح هو أيضاً YAML صالح.
YAML مجموعة شاملة من JSON يمكنك لصق مستند JSON مباشرة في محلل YAML وسيعمل. العكس ليس صحيحاً — ميزات YAML كالتعليقات والمراسي والنصوص متعددة الأسطر ليس لها مقابل في JSON.
سيناريوهات التحويل الواقعية
ترحيل الإعدادات (JSON إلى YAML، YAML إلى JSON)
هذا أكثر تحويل شائع. أدوات مختلفة تتوقع صيغ إعدادات مختلفة:
- Docker Compose وKubernetes وGitHub Actions وAnsible تستخدم YAML
- package.json وtsconfig.json وESLint تستخدم JSON
- الترحيل بين الأدوات غالباً يعني تحويل الإعدادات
هذا التحويل بلا خسارة في كلا الاتجاهين لمحتوى البيانات — لكن تعليقات YAML تُفقد عند التحويل إلى JSON، لأن JSON لا يملك صيغة تعليقات.
تحليل البيانات (JSON إلى CSV)
استجابات API تأتي بـ JSON. المحللون يحتاجون جداول بيانات. هذا التحويل يعمل جيداً لـمصفوفات JSON المسطحة — مصفوفات كائنات بمفاتيح متطابقة تُعيَّن طبيعياً إلى صفوف وأعمدة.
لكنه ينهار مع البيانات المتداخلة. كائن JSON به حقل address.city ومصفوفة skills ليس له تمثيل CSV طبيعي. يجب على المحوّل أن يختار: تسطيح المفاتيح المتداخلة أو تسلسل القيم المتداخلة كنصوص أو تجاهلها.
استيراد البيانات (CSV إلى JSON)
السيناريو المعاكس: استيراد بيانات جداول البيانات إلى تطبيق ويب أو API. تحويل CSV إلى JSON ينشئ مصفوفة كائنات بعناوين الأعمدة كمفاتيح. المشكلة أن CSV لا تملك معلومات أنواع — الرقم 42 والنص "42" والقيمة المنطقية true كلها مجرد نص في CSV.
القراءة البشرية (JSON إلى YAML)
أحياناً تحتاج فقط لجعل ملف إعدادات JSON كثيف قابلاً للقراءة. التحويل إلى YAML يمنحك مسافات بادئة نظيفة وقدرة إضافة تعليقات للتوثيق. هذا قيّم بشكل خاص لـملفات الإعدادات الكبيرة التي يصونها فريق.
ما يُفقد في التحويل
هذه المعرفة الحرجة توفر وقت التصحيح:
| التحويل | ما يُفقد |
|---|---|
| YAML إلى JSON | التعليقات (JSON لا يملك صيغة تعليقات) |
| JSON إلى CSV | التداخل (CSV مسطح)، الأنواع (كل شيء يصبح نصاً)، المصفوفات |
| CSV إلى JSON | لا شيء (لكن الأنواع يجب استنتاجها — "42" مقابل 42) |
| CSV إلى YAML | لا شيء (نفس مشكلة استنتاج الأنواع) |
| JSON إلى YAML | لا شيء (YAML مجموعة شاملة من JSON) |
| YAML إلى CSV | التعليقات، التداخل، الأنواع، المراسي/الأسماء المستعارة |
النمط واضح: التحويلات نحو CSV تفقد أكثر المعلومات لأن CSV أبسط صيغة. التحويلات بين JSON وYAML شبه بلا خسارة. وتعليقات YAML تُفقد دائماً عند مغادرة YAML.
ثنائي الاتجاه مقابل أحادي JSON إلى YAML وYAML إلى JSON ثنائيا الاتجاه فعلياً (آمنا ذهاباً وإياباً، باستثناء التعليقات). JSON إلى CSV وYAML إلى CSV أحاديا الاتجاه للبيانات المعقدة — لا يمكنك إعادة بناء التداخل من CSV مسطح.
الأخطاء الشائعة عند التحويل
فخاخ الإكراه النوعي في YAML
YAML تفسر تلقائياً بعض النصوص كأنواع غير نصية. كلمة no تصبح قيمة منطقية false. كلمة yes تصبح true. النص 1.0 يصبح عدداً عشرياً. رموز الدول مثل NO (النرويج) تسببت في أخطاء شهيرة. ضع دائماً علامات اقتباس للقيم الغامضة في YAML.
فوضى المحدد والترميز في CSV
ليست كل ملفات CSV تستخدم الفواصل. CSV الأوروبية غالباً تستخدم الفواصل المنقوطة. القيم المفصولة بالجدولة (TSV) متغير آخر. وعدم تطابق ترميز الأحرف (UTF-8 مقابل Latin-1) ينتج أحرفاً مشوهة.
مشكلة الفاصلة الزائدة في JSON
JSON لا يسمح بالفاصلة الزائدة. هذا صالح في JavaScript: {"a": 1, "b": 2,} — لكنه JSON غير صالح. فاصلة زائدة واحدة تسبب خطأ تحليل.
أداء مجموعات البيانات الكبيرة
لمجموعات البيانات بملايين الصفوف، CSV أكثر كفاءة بشكل ملحوظ من JSON أو YAML. JSON يضيف أقواساً وعلامات اقتباس لكل قيمة. CSV بمليون صف قد يكون 50 ميغابايت؛ JSON المكافئ قد يكون 150 ميغابايت.
اختيار الصيغة الصحيحة من البداية
بدلاً من التحويل لاحقاً، اختيار الصيغة الصحيحة من البداية يتجنب فقدان المعلومات:
- بيانات جدولية لجداول البيانات أو قواعد البيانات — CSV
- بيانات منظمة لـ APIs أو تطبيقات الويب — JSON
- إعدادات سيحررها البشر — YAML
- بيانات متداخلة معقدة مع تعليقات — YAML
- تبادل بيانات بين الأنظمة — JSON
للمزيد من المعلومات
حوّل بين JSON وYAML وCSV فوراً بأدوات تعمل في المتصفح:
- تحويل صيغ البيانات — الصق بياناتك، اختر الصيغة المستهدفة، حمّل النتيجة
- منسّق JSON — التحقق من صحة JSON وتنسيقه وتصغيره
- محوّل JSON إلى CSV — تحويل مصفوفات JSON إلى CSV جاهز لجداول البيانات
- محوّل YAML-JSON — التحويل بين YAML وJSON مع مراعاة التعليقات
