محوّل JSON ↔ YAML ثنائي الاتجاه
الصق JSON على اليسار واحصل على YAML على اليمين، أو العكس. كلا اللوحتين قابلتان للتعديل في الوقت الفعلي وتتزامنان تلقائياً. يتضمن أزرار تنسيق JSON والتبديل والنسخ. تتم جميع عمليات التحويل في المتصفح دون إرسال أي بيانات إلى الخوادم.
كيف تعمل
تاريخ واستخدامات JSON وYAML
ظهر JSON (تدوين كائنات JavaScript) على يد Douglas Crockford في مطلع الألفية الثالثة كصيغة خفيفة لتبادل البيانات مشتقة من صياغة كائنات JavaScript. قواعده الصارمة — علامات اقتباس مزدوجة، لا فواصل نهائية، لا تعليقات — تجعله لا غموض فيه وسهل التحليل في أي لغة. حلّ JSON محل XML سريعاً في واجهات برمجة التطبيقات على الويب نظراً لإيجازه وتوافقه الأصلي مع JavaScript.
أنشأ Clark Evans وIngy döt Net صيغة YAML عام 2001 بهدف أن تكون أكثر ودية للإنسان. يعد YAML 1.2 من الناحية التقنية مجموعة شاملة من JSON — فكل مستند JSON صالح هو YAML صالح — لكنه يضيف بنية قائمة على المسافة البادئة، والتعليقات، والنصوص متعددة الأسطر، واستنتاج النوع، مما يجعله أكثر ملاءمة للملفات التكوينية التي يحررها البشر.
متى تستخدم JSON ومتى YAML
يتفوق JSON حين تقرأ الآلات البيانات: واجهات REST API، وسجلات قواعد البيانات، والتواصل بين الخدمات، والتخزين المحلي. بساطته تعني أن كل لغة برمجة تقريباً تمتلك محلل JSON مدمج، والقواعد الصارمة تلغي الالتباس. إذا كان البرنامج هو المستهلك الرئيسي، فإن JSON هو الخيار الأمثل في الغالب.
يبرز YAML في الملفات التكوينية التي يحررها البشر: Docker Compose، ومناشير Kubernetes، وسير عمل GitHub Actions، وكتب تشغيل Ansible تستخدم YAML افتراضياً. تتيح التعليقات توثيقاً مضمّناً، والنصوص متعددة الأسطر تجعل القيم الطويلة مقروءة، وغياب الأقواس المعقوفة يجعل التكوين الهرمي أقل ازدحاماً.
أخطاء شائعة عند التحويل
حساسية YAML للمسافة البادئة هي المصدر الأكثر شيوعاً للأخطاء. خلافاً لأقواس JSON، مسافة واحدة في غير مكانها تغير البنية بالكامل. كما يقوم YAML باستنتاج الأنواع تلقائياً: الكلمة yes دون اقتباس تصبح القيمة المنطقية true، وقد يُفسَّر 0755 كرقم ثماني. يضع هذا المحوّل الاقتباسات حول السلاسل النصية التي قد تُسَاء تفسيرها للحفاظ على النوع الأصلي.
تمثّل الأحرف الخاصة تحدياً آخر. النقطتان متبوعتان بمسافة (: )، وعلامة الجنيه (#)، والأحرف الخاصة في بداية السلاسل يجب وضعها بين اقتباسات في YAML. يتعامل هذا المحوّل مع هذه الحالات تلقائياً، لكن الميزات المتقدمة في YAML كالمراسي والأسماء المستعارة والكتل متعددة الأسطر غير مدعومة وستظهر رسالة خطأ واضحة.
أسئلة شائعة
›هل YAML مجموعة شاملة من JSON؟
نعم. YAML 1.2 مجموعة شاملة صارمة من JSON، بمعنى أن كل مستند JSON صالح هو YAML صالح. العكس ليس صحيحاً دائماً: ميزات YAML كالتعليقات والمراسي وكتل القيم ليس لها مكافئ في JSON.
›لماذا يُستخدم YAML بشكل رئيسي؟
YAML شائع في الملفات التكوينية: Docker Compose، ومناشير Kubernetes، وسير عمل GitHub Actions، وكتب تشغيل Ansible. أسلوبه المقروء مناسب للملفات التي يحررها المطورون يدوياً.
›أيهما أفضل للملفات التكوينية JSON أم YAML؟
يفوز YAML في الغالب للتكوين الذي يحرره البشر لأنه يدعم التعليقات وأقل ضوضاءً بصرياً. JSON أفضل للتكوين الذي تنشئه أو تستهلكه الآلات. كثير من الأدوات (ESLint، Prettier، tsconfig) تقبل كلا الصيغتين.
›كيف يتعامل YAML مع الأحرف الخاصة؟
السلاسل التي تحتوي على نقطتين متبوعتين بمسافة، أو أحرف خاصة في البداية ({, [, #)، أو قيم تبدو كقيم منطقية أو أرقام يجب وضعها بين اقتباسات. علامات الاقتباس المفردة تعطّل جميع الهروب، وعلامات الاقتباس المزدوجة تستخدم هروباً بالشرطة المائلة العكسية مشابهاً لـ JSON. يضيف هذا المحوّل اقتباسات تلقائياً حيثما لزم.
›هل التحويل من JSON إلى YAML بدون خسائر؟
للأنواع التي يدعمها JSON (سلاسل، أرقام، قيم منطقية، null، كائنات، مصفوفات) التحويل بدون خسائر. المشكلة الوحيدة المحتملة هي استنتاج نوع YAML للقيم دون اقتباس، لذا يضع المحوّل اقتباسات حول السلاسل التي قد تُسَاء تفسيرها.
›كيف أحوّل YAML إلى JSON في Python؟
استخدم مكتبة PyYAML: import yaml, json; data = yaml.safe_load(open('file.yaml')); print(json.dumps(data, indent=2)). تتجنب الدالة safe_load تنفيذ وسوم YAML التعسفية، وهو أمر مهم للأمان.
›كيف أحوّل JSON إلى YAML في Node.js؟
باستخدام حزمة js-yaml: const yaml = require('js-yaml'); const obj = JSON.parse(fs.readFileSync('file.json')); console.log(yaml.dump(obj)). لتجنب الاعتماديات، اكتب مسلسل YAML يدوياً — وهو ما يفعله هذا المحوّل.
›ما ميزات YAML غير المدعومة؟
يتجاهل هذا المحوّل عمداً ميزات YAML المتقدمة: المراسي (&مرساة)، والأسماء المستعارة (*اسم)، ووسوم الأنواع (!!int وغيرها)، وكتل القيم متعددة الأسطر (| و>)، وفاصلات المستندات (---). وتشمل هذه الميزات أقل من 5% من استخدامات YAML الفعلية. لهذه الحالات، استخدم مكتبة YAML كاملة.
أدوات ذات صلة
آخر تحديث: