ما الذي يتغير عند تحويل البيانات بين JSON وCSV وYAML وXML؟
الصيغ الأربع تمثّل البيانات بطرق مختلفة: JSON وYAML تحملان التداخل والأنواع، وCSV جدول مسطّح من النصوص، وXML يفرّق بين العناصر والسمات. لذلك يضطر المحوّل إلى اتخاذ قرارات — كيف تُسطَّح الكائنات المتداخلة إلى أعمدة، وكيف تُفسَّر "42" و"true"، وأين تُوضع السمات — والقرار الصحيح يعتمد على ما يتوقعه النظام المستقبِل.
كيفية استخدام محوّل JSON إلى YAML
- الصق مستند JSON.
- اختر المسافة البادئة والنمط الكتلي أو الانسيابي وما إذا كنت تريد اقتباس جميع السلاسل النصية.
- انسخ YAML إلى ملف التعريف أو خط الأنابيب أو ملف OpenAPI الخاص بك.
مزايا محوّل JSON إلى YAML
- تحويل أي قيمة JSON إلى YAML 1.2
- اقتباس القيم الملتبسة (true و0123 وnull والتواريخ) للحفاظ على أنواعها
- نمط المجموعات الكتلي (block) أو الانسيابي (flow)، ومسافة بادئة بمسافتين أو 4 مسافات
- إخراج السلاسل النصية متعددة الأسطر كقيم كتلية حرفية (literal block scalars)
- اقتباس اختياري لجميع السلاسل النصية
- تحويل فوري مع إمكانية النسخ والتنزيل
مثال على محوّل JSON إلى YAML
من JSON إلى ملف تعريف بنمط Kubernetes
الإدخال:
{"apiVersion":"v1","kind":"ConfigMap","data":{"LOG_LEVEL":"info","DEBUG":"true"}}النتيجة:
apiVersion: v1
kind: ConfigMap
data:
LOG_LEVEL: info
DEBUG: "true"الأسئلة الشائعة حول محوّل JSON إلى YAML
هل تبقى السلاسل النصية مثل "true" أو "0123" سلاسل نصية؟
نعم. القيم التي كان YAML سيفسّرها كقيم منطقية أو أرقام أو null أو تواريخ تُقتبس تلقائياً بحيث يبقى نوعها محفوظاً عند التحويل ذهاباً وإياباً.
ما الفرق بين النمط الكتلي والنمط الانسيابي؟
يضع النمط الكتلي كل عنصر قائمة وكل مفتاح في سطر مستقل (المظهر المعتاد في Kubernetes/CI). أما النمط الانسيابي فيكتب المجموعات القصيرة في السطر نفسه، مثل [a, b] و{x: 1}.
هل السلاسل النصية متعددة الأسطر مدعومة؟
تُخرج السلاسل النصية التي تحتوي على أسطر جديدة كقيم كتلية حرفية (|)، ما يحافظ على قابليتها للقراءة ودقتها.
هل ناتج YAML صالح وفق YAML 1.2؟
نعم. يستخدم المحوّل مخطط YAML 1.2 الأساسي (core schema)، وهو ما تتوقعه أدوات Kubernetes وGitHub Actions وDocker Compose وOpenAPI.
ملاحظات تقنية
يعتمد التسلسل على حزمة yaml (2.x) مع مخطط YAML 1.2 الأساسي وقيمة lineWidth تساوي 0، فلا تُطوى السلاسل الطويلة على عدة أسطر أبداً. وتُحاط القيم بعلامات اقتباس مزدوجة فقط حيث يسيء 1.2 قراءتها — مثل "true" و"null" و"0123" و"1e3" والسلاسل الفارغة والقيم التي تبدأ بمؤشر مثل # أو & أو * أو [ أو تحتوي على ": ". ولأن 1.2 يقرأ yes وno وon وoff والتواريخ بصيغة ISO كسلاسل عادية، تبقى دون اقتباس؛ بينما يفسّرها مستهلكو YAML 1.1 مثل PyYAML بشكل مختلف.
تتحوّل السلاسل التي تحتوي على أسطر جديدة إلى كتل حرفية (| أو |- بحسب وجود سطر جديد في النهاية)، وتُزاح التسلسلات الكتلية تحت مفتاحها الأب، ولا تُخرج المراسي أو الأسماء المستعارة إطلاقاً. وينطبق «نمط التدفق» على كل مجموعة بما فيها الجذر، فينطوي المستند كله في سطر { … } واحد. أما «اقتباس كل السلاسل» فيمسّ القيم وحدها — تبقى المفاتيح عادية ما لم تحتج إلى اقتباس — ولأن المدخل يمرّ أولاً عبر JSON.parse، تكون الأعداد الصحيحة فوق 2^53 − 1 مقرّبة مسبقاً.
المراجع
- RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Formatقواعد JSON: الكائنات والمصفوفات والنصوص والأرقام والقيم الثلاث الثابتة، وUTF-8 كترميز للتبادل.
- RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Filesقواعد CSV الشائعة: الفاصلة كفاصل، ونهايات الأسطر CRLF، وتحويط الحقول التي تحتوي فواصل أو علامات اقتباس أو أسطر جديدة.
- YAML Ain't Markup Language (YAML™) version 1.2.2نموذج بيانات YAML 1.2 وصياغته وعلاقته بـ JSON (كل مستند JSON هو YAML 1.2 صالح).